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

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

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;
}
时间: 2024-11-03 04:20:05

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

c++-C++ PAT数据结构基础02-1题 反转单链表

问题描述 C++ PAT数据结构基础02-1题 反转单链表 题目大意:反转单链表,给定常数K和单链表L,要求按每K个节点反转单链表,如:L: 1->2->3->4->5->6 K=3,输出:3->2->1->6->5->4,如果K=4,输出:4->3->2->1->5->6. 输入说明:每次输入一个案例,对每个案例,第一行内容是链表第一个节点的地址,节点数N(N<=100,000)(不一定是最终形成的单链表的节

c++ 数据结构-数据结构c++循环单链表问题,急!!

问题描述 数据结构c++循环单链表问题,急!! CirSinglyList& operator+=(CirSinglyList &list) //尾插入list,集合并 解决方案 CirSinglyList& operator+=(CirSinglyList &list) { CirSinglyList *p = this; while(p->next != NULL) p = p->next; while(list->next != NULL) { p-

apacheds-请问Ldap中的元素怎么删除不掉?

问题描述 请问Ldap中的元素怎么删除不掉? 使用Apache Directory Studio客户端,在展开Ldap的文件树之后选中节点通过右键选项Delete Entry删除元素. 执行没有抛错,但是刷新之后元素还在. 针对节点中的具体属性逐项删除时,存在一些元素报如下错误: Error while executing LDIF - [LDAP:error code 65 - OBJECT_CLASS_VIOLATION:failed for MessageType : MODIFY_REQ

link环境下制作一款《订餐软件》,协单补录重复,选择性删除,请问这个实现的思路是什么?

问题描述 link环境下制作一款<订餐软件>,协单补录重复,选择性删除,请问这个实现的思路是什么? link环境下制作一款<订餐软件>,协单补录重复,选择性删除,请问这个实现的思路是什么? 解决方案 选择性删除,你可以提供一个界面,让用户在上面选择,然后批量删除

c语言-关于去除数组中重复元素的问题

问题描述 关于去除数组中重复元素的问题 源代码:#include #include int main() { int *a; int n,i,j; scanf("%d",n); a=(int *)malloc(n*sizeof(int)); for (i=0;i<n;i++) scanf("%d",&a[i]); for (i=0;i<n;i++) for (j=1;j<n;j++) if (a[i]==a[j]) printf (&quo

Python去除列表中重复元素的方法_python

本文实例讲述了Python去除列表中重复元素的方法.分享给大家供大家参考.具体如下: 比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) print l2 还有一种据说速度更快的,没测试过两者的速度差别 l1 = ['b','c','d','b','c','a','a'] l2 = {}.fromkeys(l1).keys() print l2 这两种都有个缺点,祛除重复元素后排序变了: ['a', 'c',

php删除数组中重复元素的方法_php技巧

几种php删除数组元素方法在很多情况下我们的数组会出现重复情况,那我们删除数组中一些重复的内容怎么办,这些元素必须保持他唯一,所以就想办法来删除它们,下面利用了遍历查询来删除重复数组元素的几种方法.方法一.完整删除重复数组实例-----删除数组中的一个元素 function array_remove_value(&$arr, $var){ foreach ($arr as $key => $value) { if (is_array($value)) { array_remove_value

JS 清除字符串数组中,重复元素的实现方法_javascript技巧

JS 清除字符串数组中,重复元素的实现方法 <script language="JavaScript"> <!-- var arrData=new Array(); for(var i=0; i<1000; i++) { arrData[arrData.length] = String.fromCharCode(Math.floor(Math.random()*26)+97); } //document.write(arrData+"<br/&g

jquery删除数组中重复元素_jquery

话不多说,下面就跟着小编来看下利用jquery实现删除数组中重复元素的具体思路吧 首先定义如下数组: var arr=[0,2,3,5,6,9,2]; 我们可以看到数组中存在重复元素'2'; 最后通过jquery筛选应该得到[0,2,3,5,6,9]; ok,首先我们再定义一个空数组,用来存放最后筛选出来的元素: var new_arr=[]; 利用jquery的$.inArray可以轻松实现: 遍历数组元素: for(var i=0;i<arr.length;i++) { var items=