876. Middle of the Linked List
解题思路
- 假设总长 len = 0,结果值 result = head
- 当 head.next 不为 null时, len++
- 计算 mid节点时分为两种情况,偶数取 len + 1,奇数取 len 4.当 mid > 1循环找中节点,result = result.next 返回 result即可代码
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var middleNode = function(head) {
let len = 0
let result = head
while(head !== null) {
len++
head = head.next
}
let mid = len % 2 === 0 ? Math.ceil((len + 1) / 2) : Math.ceil(len / 2)
while(mid > 1) {
mid--
result = result.next
}
return result
};
最简双指针解法
解题思路
双指针无非就是一个指向 head.next 一个指向 mid 即链表的中结点,会发现一个规律 偶数步移动 mid,奇数步不动 mid
- 当head指针向后移动偶数
len时,mid向后挪一步否则不动 - 当
head为null时跳出循环,直接返回mid即可
代码
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var middleNode = function(head) {
let len = 0
let mid = head
while(head !== null) {
len++
if(len % 2 === 0) {
mid = mid.next
}
head = head.next
}
return mid
};