Keshawn_lu's Blog

Leetcode 24. 两两交换链表中的节点

字数统计: 353阅读时长: 1 min
2020/10/14 Share

题目简介:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 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

思路:

使用递归,递归的终止条件为没有结点或只有一个结点。

在两两交换结点时,用 head 表示原始链表的头节点,用 newhead 表示新的链表的头节点。

则原始链表中的其余节点的头节点newHead -> next,令 head -> next = swapPairs(newhead -> next),表示将其余节点进行两两交换,交换后的新的头节点为 head 的下一个节点。然后令 newHead -> next = head,即完成了所有节点的交换。最后返回新的链表的头节点 newhead

代码如下:

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
/**
* 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) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {

if(!head || !head -> next) //为空或只有一个结点
return head;

ListNode* newhead = head -> next;

head -> next = swapPairs(newhead -> next);
newhead -> next = head;

return newhead;
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: