题目:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
注意: 1 2 3 4 交换之后为 2 1 4 3 是每两个交换,而不是1和2交换了,然后1和3交换。
/**
* 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 dummy = new ListNode(0, head); // 用哨兵节点简化代码逻辑
ListNode node0 = dummy;
ListNode node1 = head;
while(node1 != null && node1.next != null){ // 至少有两个节点
ListNode node2 = node1.next;
ListNode node3 = node2.next;
node0.next = node2;
node2.next = node1;
node1.next = node3;
node0 = node1;
node1 = node3;
}
return dummy.next;
}
}
总结:
迭代思想:只要分析前面几个的方法,后面循环就行。