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

王道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);
}
 

原文地址:https://www.cnblogs.com/TQCAI/p/8451939.html

时间: 2024-11-09 11:24:18

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

俩个递增有序单链表的合并算法(含头结点)

void  merge(LNode *A,LNode *B,LNode *&C)    //此处C指针为引用型 { LNode *p=A->next; LNode  *q=B->next; LNode  *r;     //r是尾指针 C=A; C->next=NULL; r=C; free(B);       //释放B的头结点 While(p!=NULL&&q!=NULL) { if(p->data<=q->data) { r->nex

Leetcode:Merge Two Sorted Lists 合并两个有序单链表

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 代码如下: * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x

【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】

[082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. For example, Given 1->2->

Python与数据结构[0] -&gt; 链表[0] -&gt; 单链表与带表头单链表的 Python 实现

单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利用Python来完成单链表的实现. 1 单链表 不带表头的单链表通常形式如下, node_1 -> node_2 -> node_3 -> node_4 完整代码 1 class Node: 2 def __init__(self, val=None, nxt=None): 3 self.v

[leetcode] 83. 删除排序链表中的重复元素

83. 删除排序链表中的重复元素 链表操作 class Solution { public ListNode deleteDuplicates(ListNode head) { if (head == null) return head; if (head.next == null) return head; ListNode now = head.next; ListNode last = head; while (now != null) { while (now != null &&

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

题目链接:删除排序链表中的重复元素 题意:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 题解:这个的上一题是也是删除排序链表的重复元素,不过元素都删掉..在剑指offer里也有做过.可以看链接. 这个就是在上个题的基础上做一点修改.最后更新节点时,直接指向这个重复节点的最后一个节点.而不是它的下一个. 代码: 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * L

【LeetCode链表】删除排序链表中的重复元素 II

题目描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 做这题之前,可以先做删除排序链表中的重复元素,题解. 思路 这题是<剑指Offer>上的一道题.我们需要保存3个指针:

Leetcode(无重复字符的最长子串;删除排序链表中的重复元素II;加一;最后一个单词的长度;相同的树)

1.无重复字符的最长子串 这题需要用到滑动窗口法,有许多问题都可以考虑使用滑动窗口法:https://www.geeksforgeeks.org/tag/sliding-window/ 因为用c++,所以用到set容器:std::count 2.删除排序链表中的重复元素II 3.加一 1 class Solution { 2 public: 3 vector<int> plusOne(vector<int>& digits) { 4 int n=digits.size()-

sort排序命令 uniq 去除排序过的文件中的重复行 cut提取命令 wc 统计命令

sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 [[email protected] ~]# sort [-fbMnrtuk] [file or stdin] 选项与参数: -f :忽略大小写的差异,例如 A 与 a 视为编码相同: -b :忽略最前面的空格符部分: -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法: -n :使用『纯数字