文章目录 一、题目二、C# 题解 一、题目 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 点击此处跳转题目。 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] 示例2:
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
示例2:
输入:[1, 1, 1, 1, 2]
输出:[1, 2]
提示:
进阶:
使用哈希表记录出现的数字,只需要一次遍历即可:
public class Solution { public Listnode RemoveDuplicateNodes(ListNode head) { Dictionary<int, bool> map = new Dictionary<int, bool>(); ListNode p = head, q; // 双指针,q 指向 p 的后一个元素 while (p != null) { map[p.val] = true; // 记录 p 指向的元素 q = p.next; // 更新 q if (q == null) break; int v = q.val; // 取出 p 指向的元素值 // 依据 v 对 p 进行操作 if (map.ContainsKey(v)) p.next = q.next; // 重复值,则跳过 q else p = q; // 非重复值,p 挪下一位 } return head; }}
如果不使用临时缓冲区,则需要每个元素依次检查,进行多次遍历:
public class Solution { public ListNode RemoveDuplicateNodes(ListNode head) { ListNode p = head, q; // 双指针 while (p != null) { int v = p.val; // 取出 p 指向元素的值 q = p; // q = p 代替 p进行遍历 // 出现 v 则删,否则跳到下一个 while (q.next != null) { if (q.next.val == v) q.next = q.next.next; else q = q.next; } p = p.next; // 更新 p } return head; }}
来源地址:https://blog.csdn.net/zheliku/article/details/132506962
--结束END--
本文标题: LeetCode 面试题 02.01. 移除重复节点
本文链接: https://lsjlt.com/news/383259.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0