1.反转链表(重点)
反转链表: 输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
假设链表为 1→2→3→∅,反转后为 ∅←1←2←3。
在遍历链表时,将当前节点的next指针改为指向前一个节点。
由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。
在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode curr=head;
while (curr!=null){
ListNode next=curr.next;
curr.next=pre;//让当前节点指向上一个节点
pre=curr;//将当前节点保存到上一个当中
curr=next;
}
return pre;
}
2.合并两个排序的链表
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null && l2 == null) return null;
ListNode head=new ListNode(-1);
ListNode temp=head;
while (l1!=null && l2 !=null){
if(l1.val > l2.val){
temp.next=l2;
l2=l2.next;
}else {
temp.next=l1;
l1=l1.next;
}
temp=temp.next;
}
temp.next= l1==null? l2:l1;
return head.next;
}
3.删除链表节点
https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/
public ListNode deleteNode(ListNode head, int val) {
if(head == null) return null;
if(head.val==val) return head.next;
//初始化双指针
ListNode pre=head;
ListNode cur=head.next;
//根据题意绝对找得到 所以无需判断是否为空
while (cur.val != val){
pre=pre.next;
cur=cur.next;
}
pre.next = cur.next;
return head;
}</