[LeetCode] Swap Nodes in Pairs 成对交换节点
Given a linked list, swap every two adjacent nodes and return its head.
Example:
Given1->2->3->4
, you should return the list as2->1->4->3
.
Note:
- Your algorithm should use only constant extra space.
- You may not modify the values in the list's nodes, only nodes itself may be changed.
这道题不算难,是基本的链表操作题,我们可以分别用递归和迭代来实现。对于迭代实现,还是需要建立dummy节点,注意在连接节点的时候,最好画个图,以免把自己搞晕了,参见代码如下:
这个虚拟头结点是必要的 因为以原始头结点开始无法处理奇数的情况
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode node = new ListNode(-1);
node.next = head;
ListNode pre = node;
while(pre.next != null && pre.next.next != null){
ListNode l1 = pre.next, l2 = pre.next.next;
ListNode next = l2.next;
l2.next = l1;
l1.next = next;
pre.next = l2;
pre = l1;
}
return node.next;
}
}