- 必须要画图,按照图片思路解题
- 创造新节点:
- (1)ListNode dummyHead=new ListNode(0,head);传值和next
- (2)ListNode dummyHead=new ListNode(-1);
- dummyHead.next=head;
- &&:与;||:或。
- 递归法:①赋值②变换③增量赋值进行递归④循环停止的条件
- 两两交换链表时候先序遍历。反转链表适合后序遍历。
方法一:
思路一:
- cur->2
- 2->1
- 1->3
思路二:(可以省去定义temp)
- cur->2
- 1->3
- 2->3
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null || head.next==null) return head; //递归停止条件 //head=null
ListNode next=head.next;
ListNode newNode=swapPairs(head.next.next); //增量赋值进行递归
next.next=head; //变换
head.next=newNode;
return next;//2->1->4->3,//函数返回next,其实头节点head也是next
}
}
递归法:
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null || head.next==null) return head; //递归停止条件 //head=null
ListNode next=head.next;
ListNode newNode=swapPairs(head.next.next); //增量赋值进行递归
next.next=head; //变换
head.next=newNode;
return next;//2->1->4->3,//函数返回next,其实头节点head也是next
}
}