菜鸟请教一个问题。删除非递减链表的重复节点
链表是1.2.2.3.3.3.4.4.5.6
[解决办法]
比如3,你只要记住2的位置,最后一个3的位置,让2指向最后3那个位置就可以了。
[解决办法]
while(listNode){
nextNode = listNode->next;
if(nextNode && listNode->value == nextNode->value){
listNode->next = nextNode->next;
free(nextNode);
}else{
listNode = nextNode;
}
}#include<stdio.h>
#include <malloc.h>
typedef struct st
{
int data;
struct st *next;
}elemsn;
elemsn * Creatlink(int a[],int n)
{
elemsn *p,*head=NULL;
int i;
for(i=n-1;i>=0;i--)
{
p=(elemsn *)malloc(sizeof(elemsn));
p->data=a[i];
p->next=head;
head=p;
}
return head;
}
void Printlink(elemsn *head)
{
elemsn *p;
for(p=head;p;p=p->next)
printf("%5d",p->data);
printf("\n");
}
elemsn * Del(elemsn *head)
{
elemsn *p=head,*q;
while(p!=NULL&&p->next!=NULL)
{
if(p->data==p->next->data)
{
q=p->next;
p->next=q->next;
free(q);
}
else p=p->next;
}
return head;
}
int main(void)
{
int a[10]={1,2,2,3,3,4,4,5,5,5};
elemsn *head;
head=Creatlink(a,10);
Printlink(head);
head=Del(head);
Printlink(head);
}