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

76次阅读

共计 924 个字符,预计需要花费 3 分钟才能阅读完成。

题目形容

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

输出

第一行输出一个正整数 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;
}

正文完
 0