876_链表的中间结点

 

package 链表;
/**
* https://leetcode-cn.com/problems/middle-of-the-linked-list/
* @author Huangyujun
*
*/
public class _876_链表的中间结点 {
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public ListNode middleNode(ListNode head) {
//先获得链表的长度,细节错误:头指针在这里已经移动到末尾了,导致后边的移动发生错误,修改为临时指针tmp来辅助
int len = 0;
// while(head != null) {
// len++;
// head = head.next;
// }

ListNode tmp = head;
while(tmp != null) {
len++;
tmp = tmp.next;
}
//如果是奇数,例如7,/2(int)=3,可以移动 3 步 1 2 3 4 5 6 7
//如果是偶数,例如 8,/2(int)=4, 1 2 3 4 5 6 7 8
// 移动 /2(int) 步即可
int mid = len / 2;
while(mid-- > 0 && head != null) {
head = head.next;
}
return head;
}
}

 


作者:一乐乐​