本题要求实现一个函数, pur_LinkList(LinkList L)函数是删除带头结点单链表的重复结点。
函数接口定义:
void pur_LinkList(LinkList L);
其中 L
是用户传入的参数。 L
是带头结点单链表的头指针。
裁判测试程序样例:
#define FLAG -1
#include <stdio.h>
#include <malloc.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}LNode, *LinkList;LinkList Creat_LinkList();/*这里忽略函数的实现*/
void pur_LinkList(LinkList L);
void Print_LinkList(LinkList L);/*这里忽略函数的实现*/
int main()
{
LinkList L;L = Creat_LinkList();
if(L == NULL)
{
printf("L=NULL,error!");
return 0;
}pur_LinkList(L);
Print_LinkList(L);return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
1 2 3 3 3 4 5 6 7 8 -1
输出样例:
在这里给出相应的输出。例如:
1 2 3 4 5 6 7 8
void pur_LinkList(LinkList L)
{
LinkList p = L->next; // p为当前节点
LinkList s; // s为p的前驱节点
LinkList a; // a为内循环的当前节点
while (p != NULL)
{
s = p;
a = p->next;
while (a != NULL)
{
if (a->data == p->data)
{
s->next = a->next; // 删除重复节点
}
else
{
s = a;//更新s的指向,相当于s=s->next
}
a = a->next;
}
p = p->next;
}
}