自学内容网 自学内容网

删除单链表的重复结点(题型合集)

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)!