原题
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6
, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
题目大意
给定一值val,在单链表中删除值为val的结点。
解题思路
在链表头添加一个结点,对链表进遍历和删除操作。
代码实现
链表结点类
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
算法实现类
public class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode root = new ListNode(1);
root.next = head;
// 调于记录要处理的元素的前驱结点
ListNode prev = root;
// prev.next表示要处理的结点
while (prev.next != null) {
// 要处理的结点是要删除的结点
if (prev.next.val == val) {
// 对结点进行删除操作
prev.next = prev.next.next;
}
// 当前处理的节点不需要删除,prev移动到下一个结点
else {
prev = prev.next;
}
}
// 返回新的根结点
return root.next;
}
}