链表|去除递增有序单链表中的重复元素

TQCAI TQCAI     2022-10-16     609

关键词:

王道P37T12

主代码:

void delete_common(LinkList& L){
    LNode* pre=L,*p=L->next;
    while(p!=NULL){
        LNode* r=p->next;
        while(r!=NULL && p->data==r->data){
            pre->next=r;
            LNode* del=p;
            p=r;
            delete del;
            r=r->next;
        }
        pre=p;
        p=p->next;
    }
}

完整代码:

技术分享图片
#include <cstdio>
#include <stdlib.h>

using namespace std;

typedef struct LNode{
    int data;
    struct LNode* next=NULL; 
    LNode(){    }
    LNode(int x){    
        data=x;
    }
}LNode;

typedef LNode* LinkList;

LinkList  build_list(int * arr,int n){
    int i;
    LinkList L=new LNode;
    LinkList pre=L;
    for(i=0;i<n;i++){
        LinkList p=new LNode(arr[i]);
        pre->next=p;
        pre=p;
    }
    return L;
}

void show_list(LinkList& L){
    LinkList p=L->next;
    while(p){
        printf("%d ",p->data);
        p=p->next;
    }
    puts("");
}

void delete_common(LinkList& L){
    LNode* pre=L,*p=L->next;
    while(p!=NULL){
        LNode* r=p->next;
        while(r!=NULL && p->data==r->data){
            pre->next=r;
            LNode* del=p;
            p=r;
            delete del;
            r=r->next;
        }
        pre=p;
        p=p->next;
    }
}

int main(){
    int arr[10]={0,0,0,0,0,0,0,0,0,0};
    LinkList L=build_list(arr,10);
    show_list(L);
    delete_common(L);
    show_list(L);
}
 
View Code

 

链表习题-有一个带头结点的单链表,编写算法使其元素递增有序(代码片段)

1/*有一个带头结点的单链表,编写算法使其元素递增有序*/2/*3算法思想:利用直接插入排序的思想,先构成只含有一个数据结点的有序单链表,然后依次插入4剩余结点到合适的位置。5*/6voidSort(LinkList&L)78LNode*p=L->next,*pre;9LNod... 查看详情

链表的相关算法及应用(代码片段)

问题六:将两个单链表的相同的值,组成一个新的链表 问题七:递增输出单链表并释放节点 问题八:将一个带头结点的单链表A分解为两个带头结点的单链表A和B使A中保存原来序号为奇数的元素,B中保存原来序号为偶数... 查看详情

被火车撞了都不能忘记的几道题(你会了吗?)(代码片段)

目录一.删除有序链表中的重复元素I二.删除有序链表重复元素II三.环形单链表中插入一个元素四.单链表翻转II五.奇偶链表一.删除有序链表中的重复元素I1.对应牛客网链接:删除有序链表中重复的元素-I_牛客题霸_牛客网(nowcod... 查看详情

数据结构将两个递增的有序链表合并为一个递增的有序链表。要求结果仍使用原来的两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复数据。(代码片段)

...:合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始比较。当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的... 查看详情

#yyds干货盘点#面试必刷top101:删除有序链表中重复的元素-i

1.简述:描述删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次例如:给出的链表为,返回.给出的链表为,返回.数据范围:链表长度满足 ,链表中任意节点的值满足 进阶:空间复... 查看详情

13.删除单链表中重复的元素

13.删除单链表中重复的元素思路:        用Hashtable辅助,遍历一遍单链表就能搞定。同高级函数9的原因,我不太会使用C++STL中的hash。而如果使用set集合来存储链表中的所有的值,实际上效率和每次... 查看详情

删除有序链表中重复的元素(nc25/考察次数top62/难度简单)(代码片段)

描述:删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次例如:给出的链表为1→1→2,返回1→2.给出的链表为1→1→2→3→3,返回1→2→3.示例1输入:1,1,2返回值:... 查看详情

两个递增有序的单链表,设计算法成一个非递减有序的链表

查看详情

两个递增有序的单链表,设计算法成一个非递减有序的链表

查看详情

leetcode83.删除排序链表中的重复元素(代码片段)

LeetCode83.删除排序链表中的重复元素题目说明/****存在一个按升序排列的链表,给你这个链表的头节点head,*请你删除所有重复的元素,使每个元素只出现一次。**返回同样按升序排列的结果链表。***/思路分析删除链表中的重复元... 查看详情

链表的分类

从链表的实现方式可以把链表分为单链表,循环链表,双向链表。单链表指的是链表中的元素的指向只能指向链表中的下一个元素或者为空,元素之间不能相互指向。也就是一种线性链表。双向链表即是这样一个有序的结点序列... 查看详情

链表习题-将两个递增单链表合并成一个递减单链表(代码片段)

1/*将两个递增单链表合并成一个递减单链表*/2/*3算法思想:两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点起进行比较,将较小的4结点链入链表中,同时后移工作指针。由于结果链表是递减的,故使用头插... 查看详情

合并链表

【问题描述】1、建立两个有序的单链表,表中元素的数据类型自己指定;2、将建立的两个链表合并为一个新的有序的单链表;3、输出显示已合并好的有序的单链表。【输入形式】输入表1的元素个数,表1的元素值(逆序),同... 查看详情

删除有序链表中重复的元素-ii(nc24/考察次数top72/难度中等)(代码片段)

描述:给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。例如:给出的链表为1→2→3→3→4→4→5,返回1→2→5.给出的链表为1→1→1→2→3,返回2→3.示例1输入:1... 查看详情

删除有序链表中重复的元素-ii(nc24/考察次数top72/难度中等)(代码片段)

描述:给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。例如:给出的链表为1→2→3→3→4→4→5,返回1→2→5.给出的链表为1→1→1→2→3,返回2→3.示例1输入:1... 查看详情

建立一个带头结点的单向链表,链表中的各结点按结点数据中的数据递增有序链接,函数fun的功能是:把形参x的值放入一个新结点并插入链表中,使插入后各结点数据域中的数据仍保持递增有序

#include<stdio.h>#include<stdlib.h>#defineN8typedefstructlist{intdata;structlist*next;}SLIST;voidfun(SLIST*h,intx){SLIST*p,*q,*s;s=(SLIST*)malloc(sizeof(SLIST));/**********found**********/ 查看详情

设a和b是两个按元素值递增有序的单链表,写一算法将a和b归并为按按元素值递减有序的单链表c,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)

 #include<stdio.h>#include<malloc.h>typedefintDataType;#include"LinList.h"voidmain(){ SLNode*head_A,*head_B,*c,*pa,*pb,*pc; inti,j,x; ListInitiate(&head_A);//初始化链表a ListInsert(he 查看详情

83.删除排序链表中的重复元素(代码片段)

力扣给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3]解题思路因... 查看详情