将单向链表中关键字的值重复的结点删除,使得链表中各结点的值均不相同。
//12.5.cpp
#include "stdafx.h"
#include"LinkList.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{ LinkNode<int>IntegerLList;
LinkNode<int>*head;
const int N=100;
int a[N]={3,2,4,5,5,6,6,6};
IntegerLList.DeleteSame(head);
IntegerLList.Printf(head);
return 0;
}
template<class T>
class LinkNode
{
template<class T>
friend class LinkList;
public:
LinkNode()
{ next=NULL;}
void CreatNew(int n,int a[]);
void DeleteSame(LinkNode*head);
void Printf(LinkNode*head);
private:
T data;
LinkNode<T>*next;
};
//LinkList.cpp
#include "StdAfx.h"
#include"LinkList.h"
template<class T>
void LinkNode<T>::CreatNew(int n,int a[])
{ LinkNode<T>*head;
LinkNode<T>*tail;
LinkNode<T>*p;
head=NULL;
for(int i=0;i<n;i++)
{ p=new LinkNode<int>;
p->data=a[i];
p->next=NULL;}
if(!head)
{ head=tail=p;
tail->next=NULL;}
else
{ tail=tail->next=p;
tail->next=NULL;}
return head;}
//LinkList.h
template<class T>
void LinkNode<T>::DeleteSame(LinkNode*head)
{ LinkNode<T>*key;
LinkNode<T>*p;
LinkNode<T>*q;
key=head;
while(key)
{ p=key;
q=key->next;
if(q!=NULL&&p!=NULL&&p->data==q->data)
{
p->next=q->next;
delete q;}
key=key->next;}}
template<class T>
void LinkNode<T>::Printf(LinkNode<T>*head)
{
LinkNode<T>*p=head;
for(;p;p=p->next)
cout<<"删除后的数表为:"<<p->data;}