69,369
社区成员
发帖
与我相关
我的任务
分享
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;
}
/*单链表的逆置*/
#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;
}