Browse Source

Add: list

i0Ek3 8 months ago
parent
commit
ceeb3b326c
2 changed files with 77 additions and 0 deletions
  1. 11
    0
      Extra/list/README.md
  2. 66
    0
      Extra/list/list.cpp

+ 11
- 0
Extra/list/README.md View File

@@ -0,0 +1,11 @@
1
+# List
2
+
3
+单链表相关操作。
4
+
5
+* 链表倒置
6
+* 链表去重
7
+* 链表合并
8
+* 移动节点
9
+* 顺序合并
10
+* 顺序插入
11
+* 排序

+ 66
- 0
Extra/list/list.cpp View File

@@ -0,0 +1,66 @@
1
+// Single List Operations
2
+// ref https://segmentfault.com/a/1190000002490878
3
+//
4
+
5
+// 倒置
6
+ListNode* reverse(ListNode *root) {
7
+    ListNode *node = nullptr; // 定义一个空指针指向一个空节点
8
+    while (root) {
9
+        ListNode *next = root->next;
10
+        root->next = node;
11
+        node = root;
12
+        root = next;
13
+    }
14
+    return node;
15
+}
16
+
17
+// 去重
18
+ListNode* rmDup(ListNode *head) {
19
+    if (head == nullptr) {
20
+        return head;
21
+    }
22
+    for (ListNode *cur = head; cur->next; ) {
23
+        if (cur->val == cur->next->val) { // 判断当前指针所指的值是否等于当前指针的下一指针所指的值
24
+            ListNode *next = cur->next->next;
25
+            delete cur->next;
26
+            cur->next = next;
27
+        } else {
28
+            cur = cur->next;
29
+        }
30
+    }
31
+    return head;
32
+}
33
+
34
+// 合并
35
+// 这个问题本身非常简单,但想通过这个基本问题,引申出链表问题一个非常常见的技巧。即设立 dummy 节点,可以称为是傀儡节点,其作用在于让合成的新链表有一个着手点。这个节点的值可以随意,我们最终返回的,实际上是 dummy.next
36
+ListNode* merge(ListNode *a, ListNode *b) {
37
+    ListNode dummy(0); // 设立一个傀儡节点,这里指向0
38
+    ListNode *tail = &dummy; // 指向dummy的tail
39
+    while (a && b) {
40
+        tail->next = a;
41
+        tail = a;
42
+        a = a->next;
43
+        tail-next = b;
44
+        tail = b;
45
+        b = b->next;
46
+    }
47
+    tail->next = a ? a : b;
48
+    return dummy.next;
49
+}
50
+
51
+// 移动节点
52
+void moveNode(ListNode **dest, ListNode **src) {
53
+    ListNode *newNode = *src;
54
+    *src = newNode->next;
55
+    newNode->next = *dest;
56
+    *dest = newNode;
57
+}
58
+
59
+
60
+
61
+// 顺序合并
62
+// 顺序插入
63
+// 排序
64
+//
65
+
66
+ps: 未完待续...

Loading…
Cancel
Save