File tree 1 file changed +69
-0
lines changed
1 file changed +69
-0
lines changed Original file line number Diff line number Diff line change
1
+ #### 2487. 从链表中移除节点
2
+
3
+ 难度:中等
4
+
5
+ ---
6
+
7
+ 给你一个链表的头节点 ` head ` 。
8
+
9
+ 移除每个右侧有一个更大数值的节点。
10
+
11
+ 返回修改后链表的头节点 ` head ` 。
12
+
13
+ ** 示例 1:**
14
+
15
+ ![ ] ( https://assets.leetcode.com/uploads/2022/10/02/drawio.png )
16
+
17
+ ```
18
+ 输入:head = [5,2,13,3,8]
19
+ 输出:[13,8]
20
+ 解释:需要移除的节点是 5 ,2 和 3 。
21
+ - 节点 13 在节点 5 右侧。
22
+ - 节点 13 在节点 2 右侧。
23
+ - 节点 8 在节点 3 右侧。
24
+ ```
25
+
26
+ ** 示例 2:**
27
+
28
+ ```
29
+ 输入:head = [1,1,1,1]
30
+ 输出:[1,1,1,1]
31
+ 解释:每个节点的值都是 1 ,所以没有需要移除的节点。
32
+ ```
33
+
34
+ ** 提示:**
35
+
36
+ * 给定列表中的节点数目在范围 ` [1, 10^5] ` 内
37
+ * ` 1 <= Node.val <= 10^5 `
38
+
39
+ ---
40
+ DFS:
41
+
42
+ 由题意可知,节点对它右侧的所有节点都没有影响,因此对于某一节点,我们可以** 对它的右侧节点递归地进行移除操作** :
43
+
44
+ - 该节点为空,那么递归函数返回空指针。
45
+
46
+ - 该节点不为空,那么先对它的右侧节点进行移除操作,得到一个新的子链表,如果子链表的表头节点值大于该节点的值,那么移除该节点,否则将该节点作为子链表的表头节点,最后返回该子链表。
47
+
48
+
49
+
50
+ ``` Go
51
+ /* *
52
+ * Definition for singly-linked list.
53
+ * type ListNode struct {
54
+ * Val int
55
+ * Next *ListNode
56
+ * }
57
+ */
58
+ func removeNodes (head *ListNode ) *ListNode {
59
+ if head == nil {
60
+ return head
61
+ }
62
+ head.Next = removeNodes (head.Next )
63
+ if head.Next != nil && head.Val < head.Next .Val {
64
+ return head.Next
65
+ } else {
66
+ return head
67
+ }
68
+ }
69
+ ```
You can’t perform that action at this time.
0 commit comments