leetcode每日一题系列-移除链表元素

181 阅读1分钟

leetcode-203-移除链表元素

[博客链接]

一个菜🐔的学习之路

[题目描述]

删除链表中等于给定值 val 的所有节点。 

 示例: 

 输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

 Related Topics 链表

[题目链接]

leetcode题目链接

[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)