题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

  1. 示例:
  2. 给定 1->2->3->4, 你应该返回 2->1->4->3.

链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs


解题思路

递归思路

填坑中。。。

迭代法(双指针)

先添加一个空头,再交换
交换过程:
24. 两两交换链表中的节点 - 图1

代码实现

# py3
class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        # 为了能够输出结果链表,设置一个空节点dummy,指向头结点
        dummy = ListNode(-1)
        dummy.next = head
        leftNode = dummy

        while head and head.next:
            midNode = head
            rightNode = head.next

            # Swapping
            leftNode.next = rightNode
            midNode.next = rightNode.next
            rightNode.next = midNode

            leftNode = midNode
            head = midNode.next

        return dummy.next
class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode leftNode = dummy;

        while(head != null && head.next != null) {
            ListNode midNode = head;
            ListNode rightNode = head.next;

            // Swapping
            leftNode.next = rightNode;
            midNode.next = rightNode.next;
            rightNode.next = midNode;

            leftNode = midNode;
            head = midNode.next;
        }
        return dummy.next;
    }
}
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummy = new ListNode(-1);
        dummy->next = head;
        ListNode* leftNode = dummy;

        while(head!=NULL && head->next != NULL){
            ListNode* midNode = head;
            ListNode* rightNode = head->next;

            // Swapping
            leftNode -> next = rightNode;
            midNode -> next = rightNode -> next;
            rightNode -> next = midNode;

            leftNode = head;
            head = midNode->next;
        }
        return dummy -> next;
    }
};