链表 - wenzhoullq/leetcode GitHub Wiki

模板

这种head!=null&&head.next!=null模板通用于绝大部分的链表题

    while(head!=null&&head.next!=null){}

链表反转

分析

这里只记录迭代法,递归法就不考虑了;属于head不移动

模板

这个模板的小细节在于,head是固定不动的,都是head.next在移动,然后head和head.next.next连接;当然别的题目情况下,head还是会移动的,但是也是基于这个模板改造的

      ListNode dummy=new ListNode(),p=dummy;
        dummy.next=head;//容易遗忘
        while(head!=null&&head.next!=null){
            ListNode temp=head.next,next=temp.next;
            temp.next=p.next;
            p.next=temp;
            head.next=next;
            //根据题意移动p
        }
        return dummy.next;

题目

24. 两两交换链表中的节点

25. K 个一组翻转链表

92. 反转链表 II

206. 反转链表

去重

        while(head!=null&&head.next!=null){
                while(head!=null&&head.next!=null&&head.val==head.next.val) head.next=head.next.next;   
        }

题目

82. 删除排序链表中的重复元素 II

83. 删除排序链表中的重复元素

203. 移除链表元素

其他

因为题目过少,将之归类到一起

题目

86. 分隔链表

160. 相交链表

237. 删除链表中的节点 奇怪的题目

328. 奇偶链表

快慢指针

        if(head==null||head.next==null) return false;
        ListNode quick=head.next,slow=head;
        while(quick!=null&&quick.next!=null){
            if(quick==slow) return true;
            quick=quick.next.next;
            slow=slow.next;
        }

题目

141. 环形链表

142. 环形链表 II

综合题

运用了如上的知识点

题目

143. 重排链表