结点数据域依次为 a1,a2.........,an的一个单链表所有结点逆置,即第一个结点数据域变为 an
最后一个结点数据域变为 a1?
#include<stdio.h>
#include<stdlib.h>
struct list
{
int num;
struct list *next;
}*head;
void new_record()
{
struct list *p,*newer;
newer=(struct list *)malloc(sizeof(struct list));
if(head==NULL)
head=newer;
else
{
p=head;
while(p->next!=NULL)
p=p->next;
p->next=newer;
}
p=newer;
printf("please enter the number:");
scanf("%d",&p->num);
p->next=NULL;
printf("/n/n/n");
}
void display()
{
struct list *p;
if(head==NULL)
printf("this is NULL/n");
else
{
p=head;
do
{
printf("the num is %d/n",p->num);p=p->next;
}while(p!=NULL);
}
}
void change()
{
struct list *p,*p2,*temp;
p=head;
p2=p->next;
temp=p2->next;
p->next=NULL;
p2->next=p;
while(temp!=NULL)
{
p=p2;
p2=temp;
temp=temp->next;
p2->next=p;
}
head=p2;
}
void main()
{
int i,flag=1;
head=NULL;
while(flag)
{
printf("1.insert 2.display 3.exit 4.change/n");
scanf("%d",&i);
switch(i)
{
case 1:new_record();break;
case 2:display();break;
case 3:flag=0;break;
case 4:change();break;
}
}
}
这个做法是使原来指向改变,最后使HEAD指向最后一个元素,如:原来p1->p2,现改为 p2->p1