当前位置: 代码迷 >> C语言 >> 如何将一个链表变成逆向?
  详细解决方案

如何将一个链表变成逆向?

热度:200   发布时间:2006-11-22 17:18:59.0
如何将一个链表变成逆向?
就是将原链表的尾变成头,整个链表倒过来?
搜索更多相关的解决方案: 链表  逆向  

----------------解决方案--------------------------------------------------------
单向链稍麻烦,若建立的是双向链,倒置则十分容易。

而且常规的链表一般使用双向链,
这可以使得链的访问效率达到最好。
而单向链的使用是看是否有任意位置插入或删除的操作(每结点消耗一个指针的内存赢取效率,这是值得的),
若无,则使用单向链为最佳,如链栈,队列这两种数据结构,使用单向链来维护结点足矣。
----------------解决方案--------------------------------------------------------
单链表实现,有代码吗?
----------------解决方案--------------------------------------------------------


void fanxu_link_list(nodelink *head)/*尾插倒序*/
{
nodelink p,pre,p1;
p1=*head;
if(p1==NULL)
{
printf("The link is empty!");
exit(1);
}
p=p1->next;
p1->next=NULL;
if(p!=NULL)
pre=p;
while(p!=NULL)
{
p=p->next;
pre->next=p1;
p1=pre;
pre=p;
}
*head=p1;
}



----------------解决方案--------------------------------------------------------
void daozhilink(nodelink *head) /***头插倒序*****/
{
nodelink p1,p2,p3;
p3=*head;
if(p3==NULL)
printf("The link is empty!");
else
p1=p3->next;
p2=p1->next;
p3->next=NULL;
while(p1!=NULL)
{
p1->next=p3;
p3=p1;
p1=p2;
p2=p2->next;
}
*head=p3;
}
----------------解决方案--------------------------------------------------------

看不明白!


----------------解决方案--------------------------------------------------------
我靠!!!!!!!!!!!
修改首尾指针就可以了呀!!!!!!!!!!1
很简单呀!!!!!!!!!!!!!
或者在加一个指针域!!!!!!!!!!
我认为你没那个必要!!!!!!!!!
因为链表的操作很灵活!!!!!!!!!!
没那个表要去做这样的操作!!!!!!!!!1
----------------解决方案--------------------------------------------------------
看不明白阿,请五楼的版主给解释一下吧,谢谢了。
----------------解决方案--------------------------------------------------------
4,5楼的有问题吧? 只需要把指针指向换了就行了
void reverse(node *head)
{
node *p,*p1,*p2;
p=head;
while(p->next!=NULL)
{
p1=p->next;
p2=p1->next;
...
//倒指针指向的过程仔细画图就出来了,
}
head = p;
}
----------------解决方案--------------------------------------------------------

以前写过
#include<malloc.h>
#define LEN sizeof(DATA)

typedef struct PERSON
{
int num;
struct PERSON *next;
}DATA;

DATA *creat(void)
{
DATA *head,*p1,*p2;
p1=p2=(DATA *)malloc(LEN);
scanf("%d",&p1->num);
head=NULL;
while(p1->num)
{
if(head==NULL)head=p1;
else p2->next=p1;
p2=p1;
p1=(DATA *)malloc(LEN);
scanf("%d",&p1->num);
}
p2->next=NULL;
return head;
}

DATA *sort(DATA *head)
{
DATA *head1,*p1;
int flag=0;
head1=NULL;
p1=head;
while(p1)
{
flag=flag+1;
head=p1->next;
if(flag==1)
{
head1=p1;
head1->next=NULL;
}
else
{
p1->next=head1;
head1=p1;
}
p1=head;
}
return head1;
}

main()
{
DATA *head,*p;
printf("\ninput data [num]:\n");
head=creat();
head=sort(head);
printf("\noutput data have been sorted:\n");
p=head;
if(head==NULL)printf("\nLink null!\n");
else
{
while(p)
{
printf("%d ",p->num);
p=p->next;
}
}
getch();
}


----------------解决方案--------------------------------------------------------
  相关解决方案