数据结构实验之链表七:单链表中重复元素的删除

简介: 数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。

数据结构实验之链表七:单链表中重复元素的删除

Time Limit: 1000MS  Memory Limit: 65536KB

Problem Description

按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。

Input

第一行输入元素个数n; 
第二行输入n个整数。

Output

第一行输出初始链表元素个数; 
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。

Example Input

10
21 30 14 55 32 63 11 30 55 30

Example Output

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

Code realization

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode;
int n;
LNode *input(int n)
{
    LNode *head, *p;
    head = (LNode*)malloc(sizeof(LNode));
    head=NULL;
    for(int i=0;i<n;i++)
    {
        p = (LNode*)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        p->next = head;
        head = p;
    }
    p = (LNode*)malloc(sizeof(LNode));
    p->next = head;
    head = p;
    return head;
}
void del(LNode *head)
{
    LNode *p, *q, *s;
    p = head;
    while(p)
    {
        q = p->next;
        s = p;
        while(q)
        {
            if(q->data == p->data)
            {
                s->next = s->next->next;
                n--;
            }
            else
                s = q;
            q = s->next;
        }
        p = p->next;
    }
}
void output(LNode *head)
{
    LNode *p;
    p = head->next;
    while(p)
    {
        printf("%d",p->data);
        p = p->next;
        if(p)
            printf(" ");
        else
            printf("\n");
    }
}
int main()
{
    LNode *head;
    scanf("%d",&n);
    head = input(n);
    printf("%d\n",n);
    output(head);
    del(head);
    printf("%d\n",n);
    output(head);
    return 0;
}

目录
相关文章
|
22天前
|
存储 缓存 算法
数据结构-链表(一)
链表(Linked List)是一种常见的数据结构,用于存储和组织数据。与数组不同,链表的元素(节点)在内存中不必连续存储,而是通过指针链接在一起。 链表由多个节点组成,每个节点包含两部分:数据(存储实际的元素值)和指针(指向下一个节点的引用)。链表的第一个节点称为头节点,最后一个节点称为尾节点,尾节点的指针通常指向空值(null)。
31 1
|
24天前
|
存储 C++
数据结构第六弹---带头双向循环链表
数据结构第六弹---带头双向循环链表
|
1月前
|
存储
【单链表】数据结构单链表的实现
【单链表】数据结构单链表的实现
|
1月前
|
C++
从0开始回顾数据结构---链表与堆
#include <iostream> #include <algorithm> #include <string.h> using namespace std; const int N = 100010; int h[N], ph[N], hp[N], cnt; void heap_swap(int a, int b) { swap(ph[hp[a]],ph[hp[b]]); swap(hp[a], hp[b]); swap(h[a], h[b]); } void down(int u) { int t = u; if (u * 2 <= cnt &&
|
1月前
|
存储
【数据结构】双向带头循环链表的实现
【数据结构】双向带头循环链表的实现
|
1月前
【数据结构】单链表之--无头单向非循环链表
【数据结构】单链表之--无头单向非循环链表
|
1月前
|
存储 缓存 算法
数据结构从入门到精通——链表
链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表的一个显著特点是,它不需要在内存中连续存储,因此可以高效地插入和删除节点。这种灵活性使得链表在许多应用中成为理想的选择,尤其是在需要动态调整数据结构大小的场景中。
72 0
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
7天前
数据结构--链表刷题(一)快慢指针(上)
数据结构--链表刷题(一)快慢指针
13 0
|
20天前
|
存储 编译器 C语言
【数据结构】深入浅出理解链表中二级指针的应用
【数据结构】深入浅出理解链表中二级指针的应用
27 0