链表 | 去除递增有序单链表中的重复元素

Posted TQCAI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表 | 去除递增有序单链表中的重复元素相关的知识,希望对你有一定的参考价值。

王道P37T12

主代码:

void delete_common(LinkList& L){
    LNode* pre=L,*p=L->next;
    while(p!=NULL){
        LNode* r=p->next;
        while(r!=NULL && p->data==r->data){
            pre->next=r;
            LNode* del=p;
            p=r;
            delete del;
            r=r->next;
        }
        pre=p;
        p=p->next;
    }
}

完整代码:

技术分享图片
#include <cstdio>
#include <stdlib.h>

using namespace std;

typedef struct LNode{
    int data;
    struct LNode* next=NULL; 
    LNode(){    }
    LNode(int x){    
        data=x;
    }
}LNode;

typedef LNode* LinkList;

LinkList  build_list(int * arr,int n){
    int i;
    LinkList L=new LNode;
    LinkList pre=L;
    for(i=0;i<n;i++){
        LinkList p=new LNode(arr[i]);
        pre->next=p;
        pre=p;
    }
    return L;
}

void show_list(LinkList& L){
    LinkList p=L->next;
    while(p){
        printf("%d ",p->data);
        p=p->next;
    }
    puts("");
}

void delete_common(LinkList& L){
    LNode* pre=L,*p=L->next;
    while(p!=NULL){
        LNode* r=p->next;
        while(r!=NULL && p->data==r->data){
            pre->next=r;
            LNode* del=p;
            p=r;
            delete del;
            r=r->next;
        }
        pre=p;
        p=p->next;
    }
}

int main(){
    int arr[10]={0,0,0,0,0,0,0,0,0,0};
    LinkList L=build_list(arr,10);
    show_list(L);
    delete_common(L);
    show_list(L);
}
 
View Code

 

以上是关于链表 | 去除递增有序单链表中的重复元素的主要内容,如果未能解决你的问题,请参考以下文章

链表的相关算法及应用

数据结构 将两个递增的有序链表合并为一个递增的有序链表。要求结果仍使用原来的两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复数据。

数据结构:已知递增有序的单链表A,B

被火车撞了都不能忘记的几道题(你会了吗?)

链表习题-有一个带头结点的单链表,编写算法使其元素递增有序

复试上机LeetCode-简单-019.Remove Duplicates from Sorted List