题目地址:https://leetcode.com/problems/remove-linked-list-elements/
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
题目本身比较简单,考虑到以下几种情况即可:
- 第一个节点就是要删除的节点,例如:6 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6;
- 要删除的节点是连续的节点,例如:1 –> 2 –> 6–> 6 –> 3 –> 4 –> 5 –> 6, val = 6;
- 要删除的节点在尾部,例如:1 –> 2 –> 4 –> 5 –> 6, val = 6;
代码实现如下:
public class RemoveLinkedListElements {
public static ListNode removeElements(ListNode head, int val) {
if (head == null)
return null;
// 移除头部节点
while (head != null && head.val == val)
head = head.next;
ListNode p = head;
while (p != null) {
if (p.next != null && p.next.val == val) {
p.next = p.next.next;
continue;
}
p = p.next;
}
return head;
}
public static void printList(ListNode head) {
ListNode p = head;
while (p != null) {
System.out.print(p.val + "->");
p = p.next;
}
System.out.println("null");
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(6);
head.next.next.next = new ListNode(6);
head.next.next.next.next = new ListNode(4);
head.next.next.next.next.next = new ListNode(5);
head.next.next.next.next.next.next = new ListNode(6);
printList(removeElements(head, 6));
}
}
时间复杂度:O(n)。