1. 程式人生 > >資料結構實驗之連結串列:單鏈表中重複元素的刪除

資料結構實驗之連結串列:單鏈表中重複元素的刪除

資料結構實驗之連結串列七:單鏈表中重複元素的刪除

按照資料輸入的相反順序(逆位序)建立一個單鏈表,並將單鏈表中重複的元素刪除(值相同的元素只保留最後輸入的一個)。
Input:
第一行輸入元素個數 n (1 <= n <= 15);
第二行輸入 n 個整數,保證在 int 範圍內。

Output:
第一行輸出初始連結串列元素個數;
第二行輸出按照逆位序所建立的初始連結串列;
第三行輸出刪除重複元素後的單鏈表元素個數;
第四行輸出刪除重複元素後的單鏈表。

Sample Input:
10
21 30 14 55 32 63 11 30 55 30

Sample Output:


10
30 55 30 11 63 32 55 14 30 21
7
30 55 11 63 32 14 21

#include<stdio.h>
#include<stdlib.h>
struct node
{
    int data;
    struct node *next;
};
int main()
{
    int  n, i;
    node *head = NULL;                 //逆序建連結串列,只用一個頭就行,讓這個頭為空。
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        node *p = new node;
        scanf("%d",&p->data);
        p->next = head ;
        head = p;
    }                                              //逆序建個連結串列嘍。
    node *p, *q, *r;
    printf("%d\n",n);
    p = head;
     while(p)
        {
            if (p->next!= NULL) printf("%d ",p->data);
            else printf("%d\n",p->data);
            p = p->next;
        }                                          //輸出沒刪之前的連結串列。
        p = head;
        while(p)
        {
            r = p;
            q = r->next;                   //注意這個r和q是一起的,q用來判斷是否重複,r用來刪除。
            while(q)
                 {
                if(q->data == p->data)
                        {
                    r->next = q->next;
                    free(q);
                    q = r->next;
                    n--;                     //刪一個數n減一。
                        }
                else  {
                    r = r->next;
                    q = q->next;       
                      }
                  }           //這個while迴圈完,表示第一個數相同的已經刪完,接著下一個。
            p = p->next;
        }
        printf("%d\n",n);
        p = head;
    while(p)
        {
            if (p->next!= NULL) printf("%d ",p->data);
            else printf("%d\n",p->data);
            p = p->next;
        }                                     //輸出刪除後的,就這樣搞定了呢。
return 0;                   

}


主要是:
1 逆序。
2 建p, r作用是什麼,p,r和一起的作用是找到相同的元素,並且刪除。
3 連結串列的修改可以用定義的一個新指標來修改,比如這個題,用r修改這個連結串列。

                               越努力,越幸運。給自己加油!!!!