链表--求链表的中间结点
2019-12-17 本文已影响0人
暮想sun
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
public static void main(String[] args) {
LinkedNode linkedNode5 = new LinkedNode(1);
LinkedNode linkedNode4 = new LinkedNode(2, linkedNode5);
LinkedNode linkedNode3 = new LinkedNode(3, linkedNode4);
LinkedNode linkedNode1 = new LinkedNode(5, linkedNode3);
LinkedNode linkedNode = middleNode(linkedNode1);
while (linkedNode != null) {
System.out.println(linkedNode.item);
linkedNode = linkedNode.next;
}
}
public static LinkedNode middleNode(LinkedNode linkedNode) {
LinkedNode p1 = linkedNode;
LinkedNode p2 = linkedNode;
//p2向后走两步,p1走一步,p2为空的时候,p1是在正中间,偶数的话为正中间下一位
while (p2 != null && p2.next != null) {
p2 = p2.next.next;
p1 = p1.next;
}
return p1;
}
private static class LinkedNode {
private int item;
private LinkedNode next;
public LinkedNode(int item) {
this.item = item;
}
public LinkedNode(int item, LinkedNode next) {
this.item = item;
this.next = next;
}
}