本题要求实现一个函数, 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){
LNode *p=L->next,*q=L->next;
LNode *t;
while(p)//p为每次固定的节点 然后后续一直遍历与p比较
{
q = p;
t = p->next;
while(t)
{
if(t->data == p->data){
q->next = t->next;//如果相等就跳过当前节点
}
else {
q = t;//如果不等就把当前节点记为下次的前驱
}
t = t->next;
}
p = p->next;
}
}