删除单链表中值相同的多余元素
/*
删除单链表(有头结点)中所有值相同的多余元素,同时释放被删除的结点空间
思路:
依次遍历单链表中的全部结点,判断该位置后边有没有重复的结点,如果有重复的结点,则删除该结点并释放空间
*/
#include <iostream>
#include <cstdlib>
using namespace std;
const int flag = -1;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}*LinkList;
void List_TailInit(LinkList &L){
int x;
LinkList r;
L = (LinkList)malloc(sizeof(LNode));
r = L;
while(cin>>x && x!=flag){
LinkList s = (LinkList)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
}
r->next = NULL;
}
void DeleteSameNode(LinkList &L){
LinkList p, q, s;
p = L->next;
while(p){
q = p;
while(q->next){
if(p->data == q->next->data){
s = q->next;
q->next = s->next;
free(s);
}else{
q = q->next;
}
}
p = p->next;
}
}
void printList(LinkList L)
{
LinkList p = L->next;
while(p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main(){
LinkList L;
cout << "输入单链表的结点(输入-1结束):";
List_TailInit(L);
cout << "处理前的单链表:";
printList(L);
DeleteSameNode(L);
cout << "处理后的单链表:";
printList(L);
}
版权声明:本文为qq_40659154原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。