主页 > 软件开发  > 

面试题02.01.移除重复节点

面试题02.01.移除重复节点

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

示例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.移除重复节点