大哥大姐们,求编一个函数,实现链表中的数据倒置!急回!谢谢了!

浮生如梦VIP 2011-06-07 11:01:10
根据提示将下列函数补充完整。
struct node
{
int data;
struct node *next;

};

void daozhi(struct node *Head)
{//head是指向链表头结点的指针
//该函数的功能为在将链表中的数据倒置














}
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
树下 2011-06-07
  • 打赏
  • 举报
回复

struct bookinfo * ReverseOrder(struct bookinfo *p)
{
struct bookinfo *head,*p1,*p2,*temp;
head=p1=p2=temp=p;
while(head->next!=NULL)
head=head->next; //head指向表尾
temp=p1->next; //temp作临时指针,存放下一个结点地址
p1->next=NULL;
p1=temp;
while(p1!=head)
{
temp=p1->next;
p1->next=p2;
p2=p1;
p1=temp;
}
p1->next=p2;
return head;

}
KID_coder 2011-06-07
  • 打赏
  • 举报
回复
遍历链表。。。
把数据存到一个数组里面~如int a[MAX];

然后再次遍历链表
给链表里面的数据赋值~
赋值从数组a的最后一个元素开始,依次往回赋值
a514688934 2011-06-07
  • 打赏
  • 举报
回复
好理解的方法是在生成新的链表,
pamtry 2011-06-07
  • 打赏
  • 举报
回复
如果是LZ给出的那个函数声明原形的话,就不能变动head指针的指向,那只能先存储后逆序了

但是,如果传入的是的话 node** head,或者可以像上面几个例子一样返回链表头,那么直接通过通过修改链表的next指针指向,是一个更好的选择,因为这样从内存效率和时间效率上都要更好
蓝染忽右介 2011-06-07
  • 打赏
  • 举报
回复
/*单链表的逆置*/
#include<stdio.h>
#include<malloc.h>
typedef struct node{

int data;
struct node *next;

}LinkNode,*LinkList;
LinkList daozhi(LinkList H);
int main()
{
int i,n;
LinkList H,p,L;
H=(LinkList)malloc(sizeof(LinkNode));
H->next=NULL;
L=H;
printf("请输入节点的个数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LinkNode));
p->data=i;
p->next=NULL;
L->next=p;
L=p;
}
p=H->next;
printf("逆置前遍历:");
while(p)
{
printf("%4d",p->data);
p=p->next;
}
printf("\n");

p=daozhi(H);
printf("逆置后遍历:");
while(p->next!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
printf("\n");
}

LinkList daozhi(LinkList H)//函数定义
{
LinkList p,q,L;
L=q=H;
p=H->next;
H->next=NULL;
while(p)
{
q=p;
p=p->next;
q->next=L;
L=q;

}
return q;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧