题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
关键:头指针的返回
源代码
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}*LinkList;
void create_list(LinkList &L,int &n){
LinkList p,q;
int e;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf("输入链表序列,以0结束:");
scanf("%d",&e);
while(e)
{
n++;
p=(LinkList)malloc(sizeof(LNode));
p->data=e;
p->next=NULL;
q->next=p;
q=q->next;
scanf("%d",&e);
}
}
void list_traverse(LinkList L)
{
L=L->next;
while(L)
{
printf("%d ",L->data);
L=L->next;
}
}
void reverse_list(LinkList L)
{
LinkList p,q,g;
p=L->next;
g=(LinkList)malloc(sizeof(LNode));
g->next=NULL;
while(p)
{
LinkList f;
q=p;p=p->next;
f=g->next;
g->next =q;
q->next=f;
}
list_traverse(g);
L->next=g->next;
}
void test(LinkList L)
{
LinkList g;
g=(LinkList)malloc(sizeof(LNode));
g->data=2;
g->next=NULL;
L->next=g;
}
void main()
{
LinkList L;
int n=0;
create_list(L,n);
int m;
printf("逆置前:");
list_traverse(L);
//test(L);
reverse_list(L);
printf("\n逆置后:");
list_traverse(L);
}
结果
输入链表序列,以0结束:1 2 3 4 5 0
逆置前:1 2 3 4 5 5 4 3 2 1
逆置后:5 4 3 2 1