删除单链表中值相同的多余元素

/*
删除单链表(有头结点)中所有值相同的多余元素,同时释放被删除的结点空间

思路:
依次遍历单链表中的全部结点,判断该位置后边有没有重复的结点,如果有重复的结点,则删除该结点并释放空间 
*/
#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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>