单链表删除相同值(单链表)

来源:互联网 发布:mac mini diy 编辑:程序博客网 时间:2024/06/05 18:34

1.题目:

Problem Description

单链表A是递增有序数列,编写算法,删除值相同的多余节点,可能有多组相同值。
 

Input

输入包含多组测试数据,每组测试数据第一行是一个n,表示有n个数输入,第二行是n个数,当n为零时结束(n>=0)。
 

Output

输出删除相同值后的列表,每两个数据之间有一个空格。
 

Sample Input

51 2 2 3 361 1 1 1 1 161 2 3 4 5 60

 

Sample Output

1 2 311 2 3 4 5 6

 

 

 

2.参考代码:

 

#include <iostream>using namespace std;struct Node {    int data;    Node* next;};class LinkList{private:    Node* head;public:    LinkList(int a[], int n);    ~LinkList();    void Delete();    void PrintList();};LinkList::LinkList(int a[], int n){    Node* r, *s;    head = new Node;    r = head;    for (int i = 0; i < n; i++) {        s = new Node;        s->data = a[i];        s->next = r->next;        r->next = s;        r = s;    }    r->next = NULL;}LinkList::~LinkList(){    Node* q;    while (head) {        q = head;        head = head->next;        delete q;    }}void LinkList::Delete(){    Node* p, *q;    p = head->next;    q = p->next;    while (p && p->next) {        if (q->data == p->data) {            p->next = q->next;            delete q;            q = p->next;        } else {            p = p->next;            q = p->next;        }    }}void LinkList::PrintList(){    Node* p = head->next;    if (p) {        cout << p->data;        p = p->next;        while (p) {            cout << " " << p->data;            p = p->next;        }        cout << endl;    }}int main(){    int i, n, a[1000];    while (cin >> n) {        if (n == 0)            break;        for (i = 0; i < n; i++)            cin >> a[i];        LinkList k(a, n);        k.Delete();        k.PrintList();    }    return 0;}


 

原创粉丝点击