加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何在一次迭代中走到奇异链表的中间?

发布时间:2020-12-15 04:53:37 所属栏目:Java 来源:网络整理
导读:最近我被问到一个问题,在一个单独的链表中我们如何在一次迭代中进入列表的中间位置. A -- B -- C -- D (even nodes) 为此,它应该返回指向B的地址 A -- B -- C (odd nodes) 对此,它也应该返回指向B的地址 有一个解决方案,两个指针一个移动一次,其他移动两次,
最近我被问到一个问题,在一个单独的链表中我们如何在一次迭代中进入列表的中间位置.

A --> B --> C --> D (even nodes)

为此,它应该返回指向B的地址

A --> B --> C (odd nodes)

对此,它也应该返回指向B的地址

有一个解决方案,两个指针一个移动一次,其他移动两次,但它似乎没有在这里工作

LinkedList p1,p2;

while(p2.next != null)
{
    p1 = p1.next;
    p2 = p2.next.next;

}

System.out.print("middle of the node" + p1.data); //This does not give accurate result in odd and even

如果有人之前做过这个,请帮忙.

解决方法

除非您成功地将p2提前两次,否则无法前进p1;否则,如果列表长度为2,则最终两者都指向末尾(并且您指示甚至长度列表应该朝向开头舍入).

所以:

while ( p2.next != null ) {
    p2 = p2.next;
    if (p2.next != null) {
        p2 = p2.next;
        p1 = p1.next;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读