有一个递增非空单链表,设计一个算法删除值域重复的结点。例如,{1,1,2,3,3,3,4,4,7,7,7,9,9,9}经过删除后变成{1,2,3,4,7,9}。
#include<iostream>
using namespace std;
//考试时不用写出来
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
void del(LNode* L)
{
LNode* p = L->next, * q;
while (p->next!=NULL)
{
if (p->data == p->next->data)
{
q = p->next;
p->next = q->next;
free(q);
}
else
p = p->next;
}
}
//建表函数
void createList(LNode *&head, int arr[], int n)
{
head = (LNode*)malloc(sizeof(LNode));
head->next = NULL;
LNode* r = head;
for (int i=0;i<n;++i)
{
LNode* p = (LNode*)malloc(sizeof(LNode));
p->data = arr[i];
p->next = NULL;
r->next = p;
r = p;
}
}
//打印列表的函数
void printList(LNode* L)
{
LNode* p;
p = L->next;
while (p!=NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
//主函数
int main()
{
int a[] = { 1,2,2,2,3,3,3,3,4,4,4,4,6,7,7,7,8 };
LNode* A;
createList(A, a, 17);
del(A);
printList(A);
return 0;
}