链表总结:
1.删除、添加结点一定要在头指针前面在创建一个空节点。因为有可能要删除的是头指针
ListNode res=new ListNode();
res.next=head;
//但是遍历链表的时候还是用
ListNode temp=head;
while(temp!=null)
2.结点右移和结点的边移动是有区别的
//结点移动
cur=cur.next
//结点的边 -> 移动
cur.next=cur.next.next;
3.链表要使用指针的话一般都是快慢指针,除个别题目的相关性质:如回文链表 回文的特性就是要用左右指针如——【力扣234回文链表】【银联01:回文链表】
①快慢指针再同个位置,同时出发,快指针走2步,慢指针走1步。在while循环的条件是(fast!=null&&fast.next!=null)————【力扣141环形链表】
②快慢指针再同一位置,快指针走x步后,快慢指针再同时走,走的速度都是一样的,每次都1步。在while循环的条件是(fast.next!=null)————【力扣19删除倒数N个结点】
4.把B链表的所有结点直接接在A链表的后面————【力扣86分割链表】
cur.next=dummy.next;//直接把辅助链表的结点的值赋给cur.next,这一句话等同于下面的操作
/*
//因为node结点的位置已经是链表末尾了,所以要把辅助链表再次利用的话,必须要node=dummy 或者直接使用dummy来(反正也只是辅助链表)
//必须注意我们定义的辅助链表第一个是空节点,不放任何值,所以要把链表的dummy.next.val添加才行
while(dummy.next!=null){
cur.next=new ListNode(dummy.next.val);
cur=cur.next;
dummy=dummy.next;
}
*/
5.如果创建一个新的结点dummy,用来当做新链表的无任何信息的头结点,新的结点后面没有任何一个结点,那么要创建dummy的下一个结点。操作如下————【力扣86分割链表】
ListNode ans=new ListNode();
ListNode cur=ans;
cur.next=new ListNode(temp.val);//这里添加的temp.val值根据题意而定
cur=cur.next;//结点后移
题目:
Day1:21合并两个有序链表
Day4: 83删除排序链表中的重复元素
Day11:141环形链表
Day11:160相交链表
Day14:203移除链表元素
Day15:206反转链表
Day17:234回文链表
Day17:237删除链表中的节点
Day37:2181合并零之间的节点
Day42:2两数相加
Day47:19删除链表的倒数第 N 个结点
Day48:82删除排序链表中的重复元素 II
Day49:86分隔链表
Day49:148排序链表
Day50:61旋转链表
Day51:142环形链表 II
Day55:银联01回文链表(超级重要)
92. 反转链表 II(背起来)