Skip to content

Commit 4097b8e

Browse files
committed
feat: update solution to lcof problem
1 parent 273773e commit 4097b8e

File tree

4 files changed

+34
-58
lines changed

4 files changed

+34
-58
lines changed

lcof/面试题18. 删除链表的节点/README.md

+17-29
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131

3232
## 解法
3333

34-
定义一个虚拟头节点 `dummy` 指向 `head`再定义指针 `pre` `cur` 分别指向 `dummy``head`
34+
定义一个虚拟头节点 `dummy` 指向 `head``pre` 指针初始指向 `dummy`
3535

36-
遍历链表`pre``cur` 往后移动。当指针 `cur` 指向的节点的值等于 `val` ,将 `pre.next` 指向 `cur.next`,然后返回 `dummy.next`
36+
循环遍历链表`pre` 往后移动。当指针 `pre.next` 指向的节点的值等于 `val` 时退出循环,将 `pre.next` 指向 `pre.next.next`,然后返回 `dummy.next`
3737

3838
<!-- tabs:start -->
3939

@@ -49,12 +49,10 @@ class Solution:
4949
def deleteNode(self, head: ListNode, val: int) -> ListNode:
5050
dummy = ListNode(0)
5151
dummy.next = head
52-
pre, cur = dummy, head
53-
while cur:
54-
if cur.val == val:
55-
pre.next = cur.next
56-
break
57-
pre, cur = cur, cur.next
52+
pre = dummy
53+
while pre.next and pre.next.val != val:
54+
pre = pre.next
55+
pre.next = None if not pre.next else pre.next.next
5856
return dummy.next
5957
```
6058

@@ -73,15 +71,11 @@ class Solution {
7371
public ListNode deleteNode(ListNode head, int val) {
7472
ListNode dummy = new ListNode(0);
7573
dummy.next = head;
76-
ListNode pre = dummy, cur = head;
77-
while (cur != null) {
78-
if (cur.val == val) {
79-
pre.next = cur.next;
80-
break;
81-
}
82-
pre = cur;
83-
cur = cur.next;
74+
ListNode pre = dummy;
75+
while (pre.next != null && pre.next.val != val) {
76+
pre = pre.next;
8477
}
78+
pre.next = pre.next == null ? null : pre.next.next;
8579
return dummy.next;
8680
}
8781
}
@@ -103,20 +97,14 @@ class Solution {
10397
* @return {ListNode}
10498
*/
10599
var deleteNode = function (head, val) {
106-
let node = head;
107-
if (node.val === val) {
108-
node = node.next;
109-
head = node;
110-
} else {
111-
while (node.next) {
112-
if (node.next.val === val) {
113-
node.next = node.next.next;
114-
break;
115-
}
116-
node = node.next;
117-
}
100+
const dummy = new ListNode(0);
101+
dummy.next = head;
102+
let pre = dummy;
103+
while (pre.next && pre.next.val != val) {
104+
pre = pre.next;
118105
}
119-
return head;
106+
pre.next = pre.next ? pre.next.next : null;
107+
return dummy.next;
120108
};
121109
```
122110

lcof/面试题18. 删除链表的节点/Solution.java

+4-8
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,11 @@ class Solution {
1010
public ListNode deleteNode(ListNode head, int val) {
1111
ListNode dummy = new ListNode(0);
1212
dummy.next = head;
13-
ListNode pre = dummy, cur = head;
14-
while (cur != null) {
15-
if (cur.val == val) {
16-
pre.next = cur.next;
17-
break;
18-
}
19-
pre = cur;
20-
cur = cur.next;
13+
ListNode pre = dummy;
14+
while (pre.next != null && pre.next.val != val) {
15+
pre = pre.next;
2116
}
17+
pre.next = pre.next == null ? null : pre.next.next;
2218
return dummy.next;
2319
}
2420
}

lcof/面试题18. 删除链表的节点/Solution.js

+9-15
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,13 @@
1010
* @param {number} val
1111
* @return {ListNode}
1212
*/
13-
var deleteNode = function (head, val) {
14-
let node = head;
15-
if (node.val === val) {
16-
node = node.next;
17-
head = node;
18-
} else {
19-
while (node.next) {
20-
if (node.next.val === val) {
21-
node.next = node.next.next;
22-
break;
23-
}
24-
node = node.next;
25-
}
13+
var deleteNode = function(head, val) {
14+
const dummy = new ListNode(0);
15+
dummy.next = head;
16+
let pre = dummy;
17+
while (pre.next && pre.next.val != val) {
18+
pre = pre.next;
2619
}
27-
return head;
28-
};
20+
pre.next = pre.next ? pre.next.next : null;
21+
return dummy.next;
22+
};

lcof/面试题18. 删除链表的节点/Solution.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@ class Solution:
77
def deleteNode(self, head: ListNode, val: int) -> ListNode:
88
dummy = ListNode(0)
99
dummy.next = head
10-
pre, cur = dummy, head
11-
while cur:
12-
if cur.val == val:
13-
pre.next = cur.next
14-
break
15-
pre, cur = cur, cur.next
10+
pre = dummy
11+
while pre.next and pre.next.val != val:
12+
pre = pre.next
13+
pre.next = None if not pre.next else pre.next.next
1614
return dummy.next

0 commit comments

Comments
 (0)