两两交换链表中的节点

描述

给一个链表,两两交换其中的节点,然后返回交换后的链表。

样例

给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。


考察点
  • 链表
    • 画图展示指针
    • 注释描述
答案
public ListNode swapPairs(ListNode head) {
    // Write your code here
     if (head == null || head.next == null) {
        return head;
    }
    ListNode frist = head.next;
    ListNode lastNode = null;
    while (head != null && head.next != null) {
        ListNode tmp = head.next;//4
        ListNode nextTmp = tmp.next;//5
        head.next = tmp.next;//3-5
        tmp.next = head;//4-3
        if (lastNode != null)
            lastNode.next = tmp;//1-4
        lastNode = head;//lastNode = 3
        head = nextTmp;//head = 5
    }

    return frist;
}