leetcode-203-移除链表元素
[博客链接]
[题目描述]
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
Related Topics 链表
[题目链接]
[github地址]
[思路介绍]
思路一:单指针
- 定义一个指针,通过next指针进行遍历右移,然后返回头节点即可
public ListNode removeElements(ListNode head, int val) {
if (head == null) {
return head;
}
ListNode dummy = new ListNode(Integer.MIN_VALUE);
dummy.next = head;
ListNode pre = dummy;
while (pre.next != null) {
if (pre.next.val != val) {
pre = pre.next;
}else {
pre.next = pre.next.next;
}
}
return dummy.next;
}
时间复杂度O(n)
思路一:双指针
- 定义两个指针一个前驱指针,一个后驱指针
- 后驱指针遍历到给定val元素后自己向后移动一个节点,前驱指针跳跃到移动后节点,完成删除任务
- 如果未遍历到给定val同时右移
public ListNode removeElements(ListNode head, int val) {
ListNode dummy = new ListNode(Integer.MIN_VALUE);
dummy.next = head;
ListNode pre = dummy;
ListNode last = dummy.next;
while (last != null){
if (last.val == val){
last = last.next;
pre.next = last;
}else{
last = last.next;
pre = pre.next;
}
}
return dummy.next;
}
时间复杂度O(n)