1. 程式人生 > >鏈表 | 去除遞增有序單鏈表中的重復元素

鏈表 | 去除遞增有序單鏈表中的重復元素

圖片 std nbsp using typedef 鏈表 color span while

王道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

鏈表 | 去除遞增有序單鏈表中的重復元素