一、leetcode算法
1、移除链表元素
1.1、题目
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
1.2、思路
思路一:此题我们使用迭代的方式解决,我们首先判断头结点下一个节点的值是否等于给定的值,如果等于,那么头结点指向下下个节点,也就是head.next = head.next.next;这样就把中间的节点去掉了。
同事头结点也有可以是指定的值,所有要用一个其他节点来指向头结点。
1.3、答案
class Solution { public ListNode removeElements(ListNode head, int val) { ListNode dHead = new ListNode(0); dHead.next = head; ListNode temp = dHead; while(temp.next != null){ if(temp.next.val == val){ temp.next = temp.next.next; }else{ temp = temp.next; } } return dHead.next; } }
复杂度分析
时间复杂度:O(n),其中 n 是链表的长度。需要遍历链表一次。
空间复杂度:O(1)。