1 题目描述
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
2 解题方法
头结点:不属于链表中有效的元素,为了方便操作而设立的一个节点
运用头插法将链表重写插入到头结点
具体操作如下所示:
3 C 语言实现
#include<stdio.h>
typedef int ElemType;
typedef struct node{
ElemType data;
struct node* next;
}LNode,*LinkList;
void createList_tail(LinkList *L){
ElemType temp;
LNode* p,*r;
*L =(LinkList) malloc (sizeof(LNode));
(*L)->next=NULL;
(*L)->data=-1;
r=(*L);
scanf("%d",&temp);
while(temp != -1){
p=(LinkList) malloc (sizeof(LNode));
p->data = temp;
p->next=NULL;
r->next =p;
r=p;
scanf("%d",&temp);
}
}
void showList(LinkList L){
LinkList temp = L->next;
while(temp!= NULL){
printf("%d ",temp->data);
temp = temp->next;
}
}
LNode* reverseList(LinkList L){
if(L==NULL) return NULL;
LNode* head=L->next;
LNode* temp=NULL;
L->next=NULL;
//进行头插法
while(head!=NULL){
temp=head->next;
head->next=L->next;
L->next=head;
head=temp;
}
}
void main(){
LinkList L;
createList_tail(&L);
reverseList(L);
showList(L);
}