重庆seo优化推广seo零基础教学
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例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;
}