问题描述
- 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
问题分析
- 利用dummy 节点来避免可能删除头结点这种特殊操作
- 利用递归来避免可能删除头结点这种特殊操作
代码实现
- dummy 节点法
public ListNode removeElements(ListNode head, int val) {
if (head == null) {
return head;
}
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode preNode = dummy;
ListNode curNode = head;
while (curNode != null) {
ListNode nextNode = curNode.next;
if (curNode.val == val) {
preNode.next = nextNode;
}else {
preNode = curNode;
}
curNode = nextNode;
}
return dummy.next;
}
- 递归
public ListNode removeElements(ListNode head, int val) {
if (head == null) {
return head;
}
ListNode resList = removeElements(head.next, val);
if (head.val == val) {
return resList;
}else {
head.next = resList;
return head;
}
}