递归的基本思想:
public ListNode swapPairs(ListNode head) {
// 1. 终止条件:当前没有节点或者只有一个节点,肯定就不需要交换了
if (head == null || head.next == null) return head;
// 2. 调用单元
// 需要交换的两个节点是 head 和 head.next
ListNode firstNode = head;
ListNode secondNode = head.next;
// firstNode 连接后面交换完成的子链表
firstNode.next = swapPairs(secondNode.next);
// secondNode 连接 firstNode
secondNode.next = firstNode;
// 3. 返回值:返回交换完成的子链表
// secondNode 变成了头结点
return secondNode;
}
迭代方法:
引入一个空节点保存头部信息
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode emptyHead = new ListNode(0);
emptyHead.next = head;
ListNode temp = emptyHead;
while (temp.next != null && temp.next.next != null){
ListNode one = temp.next;
ListNode two = temp.next.next;
temp.next = two;
one.next = two.next;
two.next = one;
temp = one;
}
return emptyHead.next;
}
}