letcode刷题_876. 链表的中间结点

84 阅读1分钟

思路: 快慢双指针

  • 具体代码,这里用了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))