有序单链表删除重复元素

左心房为你撑大大i 提交于 2020-03-10 06:45:51

前言

本文从有序单链表入手,主要思想是定义三个结构类型指针来解决有序单链表删除重复元素的问题。

图示在这里插入图片描述

其中flag作为标杆值,p去寻找相同的值。若相同则p移动到下一个,同时定义结构指针q指向其多余的结点以释放内存;若不同则flagp都向下移动。(PS:单链表有序且已有数据储存)

代码

node结构(举例说明)

typedef struct _Node
{
   int data;//数据域
   struct _Node * next;//指针域 
}node;

listDelDuplicates()函数

void listDelDuplicates(node *&head)
{
    //定义变量
    node* flag = head;	//flag作为标杆值
    node* p = head->next;	//P移动寻找相同值 
    
    while( p )
    {
        if( flag->data == p->data )	//若flag的值和p的值相同时 
        {
            node* q = p;	//定义一个q去指向p,目的是为了释放内存 
            flag->next = p->next;	//flag的next指向p的next 
            p = p->next;	//p指向下一个结点 
            delete q;	//释放q所指的结点 
        }
        else	//若两者的值不同时,flag和p都向下一个移动 
        {
            flag = p;
            p = p->next;
        }
    }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!