876.链表的中间结点
思路:
本题是常见的思路,由于单链表只能从前往后遍历,不能走回头路,所以考虑双指针。
本题的目标是找链表的中间节点,那么考虑两个指针,第一个每次走一步,第二个每次走两步;
当第二个指针为空或者第二个指针的下一步为空,那么第一个指针此时对应的位置就是中间节点位置。
链表问题常见的方法就是多指针方式。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode middleNode(ListNode head) {
ListNode preNode = head;
ListNode afterNode = head;
while (preNode != null && preNode.next != null) {
afterNode = afterNode.next;
preNode = preNode.next.next;
}
return afterNode;
}
}