leetcode-203-移除链表元素
[博客链接]
[题目描述]
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5Related 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)
