Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d73aa57

Browse files
authored
Create 5.4.5展平链表.md
1 parent 8402b2c commit d73aa57

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

‎5.4.5展平链表.md‎

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
- 问题:
2+
- 给定一个链表的头节点,要求展平一个双向链表。这意味着将链表中的嵌套结构(比如 **`child`** 指针)转换为一个单一的链表。
3+
- 例子:
4+
- 原输入:
5+
6+
```cpp
7+
1 -> 2 -> 3
8+
|
9+
4 -> 5
10+
```
11+
12+
- 输出:
13+
14+
```cpp
15+
1 -> 4 -> 5 -> 2 -> 3
16+
```
17+
18+
- 算法思想:前序遍历
19+
20+
```cpp
21+
#include <iostream>
22+
#include <list>
23+
using namespace std;
24+
25+
struct Node{
26+
Node* next;
27+
Node* prev;
28+
Node* child;
29+
int value;
30+
};
31+
32+
void FlattenList(Node* node, std::list<Node>& res){
33+
if(node == nullptr){
34+
return;
35+
}
36+
37+
res.push_back(*node);
38+
FlattenList(node->child, res);
39+
FlattenList(node->next, res);
40+
}
41+
42+
std::list<Node> FlattenListHelper(Node* head){
43+
std::list<Node> res;
44+
FlattenList(head, res);
45+
return res;
46+
}
47+
48+
int main() {
49+
// origin list:
50+
// 1 -> 2 -> 3
51+
// |
52+
// 4 -> 5
53+
54+
Node* head = new Node{ nullptr, nullptr, nullptr, 1 };
55+
head->next = new Node{ nullptr, nullptr, nullptr, 2 };
56+
head->next->prev = head;
57+
head->next->next = new Node{ nullptr, nullptr, nullptr, 3 };
58+
head->next->next->prev = head->next;
59+
head->child = new Node{ nullptr, nullptr, nullptr, 4 };
60+
head->child->next = new Node{ nullptr, nullptr, nullptr, 5 };
61+
head->child->next->prev = head->child;
62+
63+
std::list<Node> flattenedList = FlattenListHelper(head);
64+
65+
for (const Node& node : flattenedList) {
66+
cout << node.value << " ";// 1 -> 4 -> 5 -> 2 -> 3
67+
}
68+
69+
// Clean up memory
70+
Node* current = head;
71+
while (current != nullptr) {
72+
Node* temp = current;
73+
current = current->next;
74+
delete temp;
75+
}
76+
77+
return 0;
78+
}
79+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /