LinkedList模板

常见问题

  • 找链表中间节点

  • 反转链表

  • 快慢指针(找环入口,判断环存在,找中间节点)

  • 非常好的题目

    • 归并排序,判断链表是否是Palindrome

找链表中间节点

v1. 奇数返回正中间,偶数返回right

// v1: 找middle节点 (1,2,3,4)返回3, (1,2,3,4,5) 返回3
Node findMiddle(Node head) { // assert: head 至少有两个元素
    Node slow = head, fast = head;
    while (fast != null && fast.next != null) {
        fast = fast.next.next;
        slow = slow.next;
    }
    return slow;
}

v2. 奇数返回正中间,偶数返回left

用于链表的归并排序,res本身属于前一半res.next作为后半链表。

// v2: 找middle节点,(1,2,3,4)  返回2,(1,2,3,4,5)返回3.
// 适合的场景是,返回的middle节点,将middle.next 作为后半部分。 例如: 链表的归并排序算法
Node findMiddle(Node head) { // assert: head 至少有两个元素
    Node slow = head, fast = head.next;
    while (fast != null && fast.next != null) {
        fast = fast.next.next;
        slow = slow.next;
    }
    return slow;
}
posted @ 2023-05-21 10:03  编程爱好者-java  阅读(4)  评论(0编辑  收藏  举报