24. Swap Nodes in Pairs
Description
Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list’s nodes, only nodes itself may be changed.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
Solution: (Java)
/**
* 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 ret, cur, temp, last = new ListNode(0);
if (head == null || head.next == null)
return head;
ret = head.next;
cur = head;
while (cur != null && cur.next != null) {
temp = cur.next.next;
last.next = cur.next;
last = cur;
cur.next.next = last;
cur = temp;
}
if (cur == null)
last.next = null;
else
last.next = cur;
return ret;
}
}
思路
本题不难,暂时没想到啥技巧,就是遍历节点,每两个节点交换位置,需要注意的是记录上一个节点并更新上一个节点(last
)的next
指向(特别是在循环结束后也要记得更新)。