删除单链表的重复结点(题型合集)
1.删除重复的结点保留一个(带头结点)
void pur_LinkList(LinkList L)
{
LinkList cur=L->next;
while(cur)
{
LinkList s=cur;//保留当前结点
LinkList p=cur->next;//遍历后面结点
while(p)
{
if(p->data==cur->data)
{
s->next=p->next;//当前结点指针指向重复结点之后
}else
{
s=p;//改变求重复结点的前结点
}
p=p->next;
}
cur=cur->next;
}
}
2.求删除有序链表中重复的元素(不保留重复结点,无头结点)
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
#include <cstdio>
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
// write code here
if (!head) return nullptr;
ListNode * dummy=new ListNode(0);//加一个头结点操作单个结点
ListNode *pre=dummy;//重复结点前结点
dummy->next=head;
ListNode* p = head;
while (p) {
int flog=0;//标记是否出现重复
ListNode* cur =p->next;
while (cur) {
if (cur->val == p->val) {//出现重复把重复结点的前一个结点指向重复结点之后
pre->next = cur->next;
flog=1;
}else break;
cur = cur->next;
}
if (flog==0) pre=p;//没有重复结点要更新重复结点的前结点
p=cur;//p更新为下一个不重复结点
}
return dummy->next;
}
};
原文地址:https://blog.csdn.net/m0_74014534/article/details/144068418
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!