思路: 快慢双指针
- 具体代码,这里用了ts去写包括自己的测试用例,比较简单,属于easy级别的题目
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
class ListNode {
val: number
next: ListNode | null
constructor(val?: number, next?: ListNode | null) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
}
let A = new ListNode(1)
let B = new ListNode(2)
let C = new ListNode(3)
let D = new ListNode(4)
let E = new ListNode(5)
let F = new ListNode(6)
A.next = B
B.next = C
C.next = D
D.next = E
E.next = F
// let F = new ListNode(2)
function middleNode(head: ListNode | null): ListNode | null {
let fast = head
let slow = head
while (fast && fast.next) {
fast = fast.next.next
slow = slow.next
}
return slow
}
console.log(middleNode(A))