struct Addresslist *change(struct Addresslist *head)
{
struct Addresslist *p1;
struct Addresslist *p2;
p1=head;
head=head->next;
p1->next=NULL;
while(head!=NULL)
{
p2=head;
head=head->next;
p2->next=p1;
p1=p2;
}
if(head==NULL)
{
p2->next=p1;
head=p2;
}
return head;
}(这个函数是我自己编写的,一运行显示结果时就变成了死循环,请指教!或者帮忙编个也可以)
----------------解决方案--------------------------------------------------------
没看明白你这函数 什么意思
连表 么 都是用 指针指向下一个 或者是前面的一个就可以了
不用这么麻烦
p=p->prior;
不就可以了么
----------------解决方案--------------------------------------------------------
会不会是链表尾没有指向NULL了.
----------------解决方案--------------------------------------------------------
去我链表帖看下.
链表反序最好是用头插法把链表重新排过.
----------------解决方案--------------------------------------------------------
可以用入栈,再出栈
----------------解决方案--------------------------------------------------------
什么入栈出栈,不是很懂
王者你的链表在哪里啊?
----------------解决方案--------------------------------------------------------
入栈,再出栈 不错!
不过前提是要有一个栈操作程序.
----------------解决方案--------------------------------------------------------
现把链表的值放在数组里 然后在从数组里倒序把值取出来
----------------解决方案--------------------------------------------------------
我给你写了一个完整的;挺匆忙的,你测试一下,应该没有大问题,你也可以完善一下;
/*************** data define ***********/
struct List
{
int data;
struct List *next;
};
typedef struct List Node;
typedef Node *Link;
/*************** fun declare***********/
Link Create_List(void);
void Print_List(Link Head);
Link Inverse_List(Link Head);
/*********** main function ************/
int main(void)
{
Link Head;
Head = Create_List();
Print_List(Head);
Head = Inverse_List(Head);
printf("after inverse:\n");
Print_List(Head);
return 0;
}
/********** fun definition ***********/
Link Create_List(void)
{
Link Head, Point, New;
Head = (Link)malloc(sizeof(Node));
if(Head == NULL)
{
printf("Memory Allocate Failed!\n");
return Head;
}
printf("please input number,end with zero:\n");
scanf("%d",&Head->data);
if(Head->data == NULL)
{
Head = NULL;
return Head;
}
Head->next = NULL;
Point = Head;
while(1)
{
New = (Link)malloc(sizeof(Node));
scanf("%d",&New->data);
New->next = NULL;
if(New->data == NULL)
break;
Point->next = New;
Point = New;
}
return Head;
}
void Print_List(Link Head)
{
Link Point;
if(Head == NULL){
printf("the List is Empty!\n");
return;
}
Point = Head;
printf("the List Output is:\n");
while(Point != NULL)
{
printf("%d\t",Point->data);
Point = Point->next;
}
printf("\n");
return;
}
Link Inverse_List(Link Head)
{
Link Point, New, Back;
if(Head == NULL) //List is Empty
{
printf("List is Empty!\n");
return Head;
}
if(Head->next == NULL) //List is Only One Node
{
return Head;
}
Back = Head;
Point = Back->next;
New = Point->next;
Back->next = NULL;
while(Point->next != NULL)
{
Point->next = Back;
Back = Point;
Point = New;
New = New->next;
}
Point->next = Back;
Head = Point;
return Head;
}
----------------解决方案--------------------------------------------------------
谢谢
----------------解决方案--------------------------------------------------------