Skip to content

Commit 21e4940

Browse files
committed
feat: add python and java solution to lcof problem
添加《剑指 Offer》题解:面试题18. 删除链表的节点
1 parent a2a0c2c commit 21e4940

File tree

4 files changed

+133
-1
lines changed

4 files changed

+133
-1
lines changed

lcof/README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@
4646
│   ├── README.md
4747
│   ├── Solution.java
4848
│   └── Solution.py
49-
└── 面试题24. 反转链表
49+
├── 面试题24. 反转链表
50+
│   ├── README.md
51+
│   ├── Solution.java
52+
│   └── Solution.py
53+
└── 面试题25. 合并两个排序的链表
5054
├── README.md
5155
├── Solution.java
5256
└── Solution.py
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# [面试题18. 删除链表的节点](https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/)
2+
3+
## 题目描述
4+
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
5+
6+
返回删除后的链表的头节点。
7+
8+
注意:此题对比原题有改动
9+
10+
**示例 1:**
11+
12+
```
13+
输入: head = [4,5,1,9], val = 5
14+
输出: [4,1,9]
15+
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
16+
```
17+
18+
**示例 2:**
19+
20+
```
21+
输入: head = [4,5,1,9], val = 1
22+
输出: [4,5,9]
23+
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
24+
```
25+
26+
**说明:**
27+
28+
- 题目保证链表中节点的值互不相同
29+
- 若使用 C 或 C++ 语言,你不需要 `free``delete` 被删除的节点
30+
31+
## 解法
32+
### Python3
33+
```python
34+
# Definition for singly-linked list.
35+
# class ListNode:
36+
# def __init__(self, x):
37+
# self.val = x
38+
# self.next = None
39+
40+
class Solution:
41+
def deleteNode(self, head: ListNode, val: int) -> ListNode:
42+
pre = ListNode(0)
43+
pre.next = head
44+
dummy = pre
45+
p = head
46+
while p:
47+
if p.val == val:
48+
pre.next = p.next
49+
break
50+
else:
51+
pre, p = p, p.next
52+
return dummy.next
53+
54+
```
55+
56+
### Java
57+
```java
58+
/**
59+
* Definition for singly-linked list.
60+
* public class ListNode {
61+
* int val;
62+
* ListNode next;
63+
* ListNode(int x) { val = x; }
64+
* }
65+
*/
66+
class Solution {
67+
public ListNode deleteNode(ListNode head, int val) {
68+
ListNode pre = new ListNode(0);
69+
pre.next = head;
70+
ListNode dummy = pre, p = head;
71+
while (p != null) {
72+
if (p.val == val) {
73+
pre.next = p.next;
74+
break;
75+
} else {
76+
pre = p;
77+
p = p.next;
78+
}
79+
}
80+
return dummy.next;
81+
}
82+
}
83+
```
84+
85+
### ...
86+
```
87+
88+
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* Definition for singly-linked list. public class ListNode { int val; ListNode
3+
* next; ListNode(int x) { val = x; } }
4+
*/
5+
class Solution {
6+
public ListNode deleteNode(ListNode head, int val) {
7+
ListNode pre = new ListNode(0);
8+
pre.next = head;
9+
ListNode dummy = pre, p = head;
10+
while (p != null) {
11+
if (p.val == val) {
12+
pre.next = p.next;
13+
break;
14+
} else {
15+
pre = p;
16+
p = p.next;
17+
}
18+
}
19+
return dummy.next;
20+
}
21+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Definition for singly-linked list.
2+
# class ListNode:
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.next = None
6+
7+
class Solution:
8+
def deleteNode(self, head: ListNode, val: int) -> ListNode:
9+
pre = ListNode(0)
10+
pre.next = head
11+
dummy = pre
12+
p = head
13+
while p:
14+
if p.val == val:
15+
pre.next = p.next
16+
break
17+
else:
18+
pre, p = p, p.next
19+
return dummy.next

0 commit comments

Comments
 (0)