資料結構實驗之鍊表七 單鏈表中重複元素的刪除

2021-09-23 17:21:04 字數 1514 閱讀 6337

time limit: 1000 ms memory limit: 65536 kib

submit

statistic

problem description

按照資料輸入的相反順序(逆位序)建立乙個單鏈表,並將單鏈表中重複的元素刪除(值相同的元素只保留最後輸入的乙個)。

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

730 55 11 63 32 14 21

hint

source

不得使用陣列!

涉及到鍊錶重複元素刪除問題,首先要考慮應該用到幾個游動指標來進行重複元素的刪除。首先要有乙個游動指標將鍊錶中結點的資料都進行讀取一遍(設為p指標),其次應該需要另外兩個游動指標來進行重複的結點的刪除(分別設為q指標和w指標,q=w->next),當後面的游動結點的資料等於第乙個游動指標所指的結點的資料時進行刪除操作(即w->data==p->data),具體就是將q指標的下乙個指向w的下乙個(q->next=w->next)這裡的w指標千萬不要進行等於空指標操作,即千萬不要

w->next=null,因為這樣操作之後會使游動指標w的通路丟失,因為前面是w->data=p->data,w是要刪除的結點,前面

q->next=w->next此操作已經使w結點的入口打斷,如果此時再將w結點的出口打斷的話游動指標w就沒辦法往下進行遍歷。所以在將入口打斷之後出口不要再管了,不影響的。最後在第一組輸出的時候直接逆序建立鍊錶即可。

ac**:

#includeusing namespace std;//寫c的同學改一下頭檔案即可

typedef struct node

tree;

int main()

printf("%d\n",n);

p=head->next;

while(p)

else

p=p->next;

} p=head->next;

while(p)

else

}p=p->next;

} printf("%d\n",n);

p=head->next;

while(p)

else

p=p->next;

} return 0;

}

資料結構 鍊錶之單鏈表

單鏈錶即每個節點都存在資料域和指標域 特殊節點除外 每個節點都乙個直接前驅節點和直接後繼節點 頭節點無前驅,尾節點無後繼 簡單來說就是上乙個節點的指標域中存放了下乙個節點的位址,因此可以實現層層節點依次查詢,時間複雜度為o n 這也就是相對順序表而言的缺點,但是對於頻繁的插入和刪除節點卻是相對於順序...

資料結構實驗之鍊表七 單鏈表中重複元素的刪除

time limit 1000ms memory limit 65536k 按照資料輸入的相反順序 逆位序 建立乙個單鏈表,並將單鏈表中重複的元素刪除 值相同的元素只保留最後輸入的乙個 第一行輸入元素個數n 第二行輸入n個整數。第一行輸出初始鍊錶元素個數 第二行輸出按照逆位序所建立的初始鍊錶 第三行...

資料結構實驗之鍊表七 單鏈表中重複元素的刪除

資料結構實驗之鍊表七 單鏈表中重複元素的刪除 time limit 1000ms memory limit 65536k 按照資料輸入的相反順序 逆位序 建立乙個單鏈表,並將單鏈表中重複的元素刪除 值相同的元素只保留最後輸入的乙個 第一行輸入元素個數n 第二行輸入n個整數。第一行輸出初始鍊錶元素個數...