首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学者请问一个有关问题。删除非递减链表的重复节点

2013-09-12 
菜鸟请教一个问题。删除非递减链表的重复节点链表是1.2.2.3.3.3.4.4.5.6[解决办法]比如3,你只要记住2的位置

菜鸟请教一个问题。删除非递减链表的重复节点
链表是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;
        }
    }

[解决办法]
3个问题:
1、elemsn *p=head->next,*q;
p应该为head;
2、if(p->data=p->next->data)
应该为==
3、free(p);
应该为free(q);
#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);

}

热点排行