链表刷题总结

Posted skyeangel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表刷题总结相关的知识,希望对你有一定的参考价值。

 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }

查找一个链表的中间节点:使用快慢指针

  注意:如果用途是对链表的左右分别递归调用时,需要将中间节点的前一个结点的next = null  即需要一个pre结点(注意先要赋null初始化)

ListNode midList(ListNode node){
        if(node == null || node.next == null) return node;
        ListNode slow = node, fast = node;
        ListNode pre = null;
        while(fast != null && fast.next != null){
            pre = slow;
            slow = slow.next;
            fast = fast.next.next;
        }
        pre.next = null;
        return slow;
    }

  

反转一个链表,并返回头结点

ListNode reverse(ListNode node){
        if(node == null || node.next == null) return node;
        ListNode pre = null;
        while(node != null){
            ListNode next = node.next;
            node.next = pre;
            pre = node;
            node = next;
        }
        return pre;
    }

  

 

  

以上是关于链表刷题总结的主要内容,如果未能解决你的问题,请参考以下文章

链表刷题集合

链表刷题集合

leetcode之哈希表刷题总结1

LeetCode刷题总结-链表

LeetCode每日一题刷题总结

LeetCode剑指Offer刷题总结