文章目录
系列:链表专练
语言:java & go
题目来源:Leetcode203 移除链表元素
难度:简单
考点:头结点 && 虚拟头结点
思路和参考答案
- 文章目录
- 题目描述
- 思路
- java参考代码
- go参考代码:
题目描述
给你一个链表的头节点 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
输出:[]
提示:
列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50
思路
两种思路;使用虚拟头节点和不使用虚拟头节点。两种方式的共同思路是:首先定义变量,然后通过遍历链表,如果该节点的值等于要删除的值,就使前一个节点的下一个节点等于该节点的下一个节点,从而实现链表中数据的删除。
java参考代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { //添加虚拟节点方式 时间复杂度O(n) 空间复杂度O(1) public ListNode removeElements(ListNode head, int val) { if(head == null){ return head; } ListNode dummy = new ListNode(-1,head); ListNode pre = dummy; ListNode cur = head; while(cur != null){ if(cur == val){ pre.next = cur.next; }else{ pre = cur; } cur = cur.next; } return dummy.next; } public ListNode removeElements(ListNode head, int val) { while(head != null && head.val == val){ head = head.next; } ListNode curr = head; while(curr!= null){ while(curr.next != null && curr.next.val ==val){ curr.next = curr.next.next; } curr = curr.next; } return head; } }
go参考代码:
go中需要自己实现结构体的定义。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18type ListNode struct { Val int Next *ListNode } func removeElements(head *ListNode,val int) *ListNode { dummyHead := &ListNode{} dummyHead.Next = head cur := dummyHead for cur!= nil && cur.Next != nil{ if cur.Next.Val == val{ cur.Next = cur.Next.Next }else{ cur = cur.Next } } return dummyHead.Next }
以上分析,希望对您有所帮助,您的支持是我最大的动力,感谢一键三连!!
最后
以上就是强健纸鹤最近收集整理的关于每日一题:Leetcode203 移除链表元素文章目录题目描述思路的全部内容,更多相关每日一题:Leetcode203内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复