【LeetCode】24. 两两交换链表中的节点_数据结构

这道题,可以用迭代和递归

难点:
虚拟头节点
类似双指针,设置两个变量,指向要交换的节点
我之前的疑惑点就是在不修改节点的内部值,所以,就是节点名称和节点是一起移动的

/**
* Definition for singly-linked list.
* 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) {
// 虚拟头结点
ListNode dummyNode = new ListNode(0);
dummyNode.next = head;
ListNode prev = dummyNode;

while (prev.next != null && prev.next.next != null) {
ListNode temp = head.next.next; // 缓存 next
prev.next = head.next; // 将 prev 的 next 改为 head 的 next
head.next.next = head; // 将 head.next(prev.next) 的next,指向 head
head.next = temp; // 将head 的 next 接上缓存的temp
prev = head; // 步进1位
head = head.next; // 步进1位
}
return dummyNode.next;
}
}

参考链接:
​​​https://leetcode-cn.com/problems/swap-nodes-in-pairs/​​​​代码随想录​