【leetcode】24.两两交换链表中的节点

3 阅读1分钟
  1. 必须要画图,按照图片思路解题
  2. 创造新节点:
  • (1)ListNode dummyHead=new ListNode(0,head);传值和next
  • (2)ListNode dummyHead=new ListNode(-1);
    • dummyHead.next=head;
  1. &&:与;||:或。
  2. 递归法:①赋值②变换③增量赋值进行递归④循环停止的条件
  3. 两两交换链表时候先序遍历。反转链表适合后序遍历。

方法一:

思路一:

  1. cur->2
  2. 2->1
  3. 1->3

思路二:(可以省去定义temp)

  1. cur->2
  2. 1->3
  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
    }
}