面试题02.01.移除重复节点
- 软件开发
- 2025-09-15 06:33:02

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]示例2:
输入:[1, 1, 1, 1, 2] 输出:[1, 2]提示:
链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:
如果不得使用临时缓冲区,该怎么解决?
题解:
小编在写这道题的时候没有使用缓冲区的方法,而是定义了两个指针p,q
p指针指向head,q指针指向p
即在给定的链表上使用双重循环,第一重循环从链表的头节点开始,枚举一个保留的节点,也就是保留最开始出现的节点。第二重循环是从枚举的保留节点开始,到链表的末尾结束,将所以与其保留节点相同的节点全部移除。
这样也就是用时间换空间,时间复杂度会增加
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* removeDuplicateNodes(struct ListNode* head) { if(head==NULL||head->next==NULL) { return head; } struct ListNode*p=head; while(p!=NULL&&p->next!=NULL) { struct ListNode*q=p; while(q->next!=NULL) { if(p->val==q->next->val) { q->next=q->next->next; } else{ q=q->next; } } p=p->next; } return head; }面试题02.01.移除重复节点由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“面试题02.01.移除重复节点”