关于数据结构和算法:PIPIOJ1447-PIPI的线性表问题Ⅰ

题目形容

已知线性表中的元素以递增序列排列,并以单链表作存储构造。设计算法删除表中所有值雷同的多余元素(使得操作后的线性表中所有的值均不雷同),同时开释被删结点空间,并剖析算法的工夫复杂度。

输出

第一行输出一个正整数n,示意元素个数,n<=100。
第二行输出n个正整数元素,保障元素以递增排列,元素的值<=100。

输入

输入删除雷同元素后的链表。

样例输出

5
1 1 3 4 4

样例输入

1 3 4

C++代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

typedef struct LNode {
    ElemType data;
    struct LNode* next;
}LNode,*LinkList;

LinkList CreateList(LinkList& L, int n) {
    L = (LNode*)malloc(sizeof(LNode));
    L->next = NULL;
    LNode* s, * r = L;
    int i = 0;
    int x;
    while (i < n) {
        scanf("%d", &x);
        s = (LNode*)malloc(sizeof(LNode));
        s->data = x;
        s->next = r->next;
        r->next = s;
        r = s;
        i++;
    }
    r->next = NULL;
    return L;
}

void PrintList(LinkList L) {
    LNode* p = L->next;
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

void DeleteRepeated(LinkList& L) {
    LNode* p = L->next;
    LNode* q, * r;
    while (p->next != NULL) {
        q = p->next;
        if (p->data == q->data) {
            r = q->next;
            p->next = r;
            free(q);
        }
        else {
            p = p->next;
        }
    }
}

int main() {
    LinkList L;
    int n;
    scanf("%d", &n);
    CreateList(L, n);
    DeleteRepeated(L);
    PrintList(L);
    return 0;
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理