删除链表中的重复的元素

原创 2015年07月07日 10:43:00

思想:
首先,创建一个非降序的链表(每次输入的数据不小于前者)
其次,遍历链表,只保留相同元素中的一个。

#include <stdio.h>
#include <stdlib.h>
typedef struct List
{
     struct List *next;
     int item;
}List,*link;
link init();
link orderinsert();  //创建一个非降序的链表
link LinkRepDel(link );
void show(link );

int main()
{
    List *p,*q;
    printf("Creat non-descending link:\n");
    p = orderinsert();
    show(p);
    printf("The new link:\n");
    q = LinkRepDel(p);
    show(q);
    return 0;
}

link init()
{
    List *st = malloc(sizeof(st));
    if(st == NULL)
        printf("failure to apply for memory!");
    st->next = NULL;
    return st;
}

link orderinsert()
{
    List *head,*st = init();
    head = st;
    int x;
    scanf("%d",&x);
    st->item = x;
    while(scanf("%d",&x) != EOF)
        if(x < st->item)           //此条件保证每次输入的数据不小于前者
            continue;
        else
        {
                List *p = malloc(sizeof(*p));
                p->item = x;
                st->next = p;
                p->next = NULL;
                st = p;
        }
    return head;
}
link LinkRepDel(link st)
{
    List *p,*q ,*head;
    p = st;
    head = p;
    q = st->next;
    for(;q->next != NULL;)
    {
        while(p->item == q->item)
            q = q->next;
        p = p->next;
        p->item = q->item;
        q = q->next;
    }
    p->next = NULL;
    return head;
}

void show(link st)
{
    int N = 0;
    do
    {
         printf("%3d",st->item);
         st = st->next;
         N++;
    } while(st != NULL);
    printf("\n");
    printf("The size of the link is:%d\n",N);
}

【链表】删除链表中的重复元素

题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 ...
  • u012351768
  • u012351768
  • 2016年10月10日 10:34
  • 819

从链表中删除重复数据(三种方法)

思路一: 遍历链表,把遍历的值存储到一个Hashtable中,在遍历过程中,若当前访问的值在Hashtable中已经存在,则说明这个数据是重复的,因此就可以删除。 优点:时间复杂度较低O(n) ...
  • IFollowRivers
  • IFollowRivers
  • 2017年04月13日 19:52
  • 1854

删除单链表中的重复节点(删除多余项)

题目:如何删除单链表中的重复节点(即保证每个元素只出现一次,删除多余的,且后来出现的元素)。 一个没有排序的单链表,如 list = {a, 1, x, b, e, f, f, e, a, g, h...
  • cyuyanenen
  • cyuyanenen
  • 2016年06月20日 13:46
  • 9416

删除链表中重复元素

//删除链表中重复的元素 //比如1 2 3 3 4 4 //删除重复元素变为1 2 #include using namespace std; struct Node { Node(int ...
  • bladeandmaster88
  • bladeandmaster88
  • 2016年09月18日 09:39
  • 456

删除排序链表中的重复数字 II

题目描述:给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。 样例:给出 1->2->3->3->4->4->5->null,返回 1->2->5->null;给出 1->1->1-...
  • guoziqing506
  • guoziqing506
  • 2016年05月02日 22:29
  • 700

去除已排序链表中的重复元素

题目描述 给定一个已排序的单链表,去除单链表中的重复元素,只保留一个重复的元素,并且返回新的单链表。 例如: 给出1->1->2,你的函数调用之后必须返回1->2。 输入 一个已排序的单链表,例如1...
  • u014717036
  • u014717036
  • 2016年09月17日 17:50
  • 1086

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

题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。 输入 第一行输入元素个数n;  第二行输入n个整数。 输出 第一...
  • a1265262132
  • a1265262132
  • 2016年08月06日 10:30
  • 348

【链表】C++删除链表中重复的结点

题目: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 注意要删除的是所...
  • yebanxin
  • yebanxin
  • 2016年07月16日 18:36
  • 1752

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

数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 按照数据输入的...
  • Godsight
  • Godsight
  • 2016年05月16日 22:13
  • 869

leetcode 删除有序链表中的重复元素

问题描述: https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list/点击打开链接 删除有序链表中的重复元素。 G...
  • ych_ding
  • ych_ding
  • 2014年11月29日 19:57
  • 2981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:删除链表中的重复的元素
举报原因:
原因补充:

(最多只允许输入30个字)