中等 · 链表 · 原题

题目信息

LeetCode #24 · Swap Nodes in Pairs

标签:递归、链表

题目要求

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

1
2
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

1
2
输入:head = []
输出:[]

示例 3:

1
2
输入:head = [1]
输出:[1]

提示:

  • 链表中节点的数目在范围 [0, 100] 内

  • 0 <= Node.val <= 100

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/ //res->left->right->other
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode dummy={0,head};
ListNode* res=&dummy;
ListNode* left=res->next; if(left==nullptr) return dummy.next;
ListNode* right=left->next; if(right==nullptr) return dummy.next;
while(left && right){
left->next=right->next;
right->next=left;
res->next=right;
res=left;

left=left->next; if(left==nullptr) return dummy.next;
right=left->next;
}
return dummy.next;
}
};

返回目录