Algorithm
lc24_两两交换链表中的节点
就是模拟指针调换 。 题解的 dummyHead 更简洁…学习之。
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
// g++ A.cpp -g -o A.out -std=c++11
#include <bits/stdc++.h>
using namespace std;
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* l = head;
ListNode* r = head->next;
// 先保留向下的箭头,然后从向下的这里开始修改即可
ListNode* next_l = r->next;
r->next = l;
l->next = next_l;
head = r;
// 这里 l 左已经变到后面了
ListNode* dummy_head = l;
// 手贱,写多了感叹号,然后调试的时候就说为啥直接退出或者一直运行不到while...
// while (!next_l && !next_l->next) {
while (next_l && next_l->next) {
l = next_l;
r = next_l->next;
next_l = r->next;
r->next = l;
l->next = next_l;
dummy_head->next = r;
dummy_head = l;
}
return head;
}
};
int main() {
Solution sol;
ListNode* test = new ListNode(1);
test->next = new ListNode(2);
test->next->next = new ListNode(3);
test->next->next->next = new ListNode(4);
ListNode* out = sol.swapPairs(test);
while (out) {
cout << out->val << endl;
out = out->next;
}
return 0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* temp = dummyHead;
while (temp->next != nullptr && temp->next->next != nullptr) {
ListNode* node1 = temp->next;
ListNode* node2 = temp->next->next;
temp->next = node2;
node1->next = node2->next;
node2->next = node1;
temp = node1;
}
return dummyHead->next;
}
};
链接:https://leetcode.cn/problems/swap-nodes-in-pairs/solutions/444474/liang-liang-jiao-huan-lian-biao-zhong-de-jie-di-91/
|
Review
治愈年轻人心理健康的新方式【TED演讲】
关注年轻人的心理健康,社会才能有良好的未来。这里是通过基于年轻人模型来构建针对性的心理咨询来帮助年轻人的心理问题。
Tips
修改docker容器的目录映射的3种方式
Share
关于VScode解析leveldb的namespace报错