逆置单链表
#include<stdio.h>
#include<stdlib.h>
typedef struct listnode{
int val;
struct listnode *next;
}ListNode,*LinkList;
输入单链表的值
注意:待头结点的单链表一定要先给Head分配空间!否则会卡死
LinkList Input(){
LinkList Head=(LinkList)malloc(sizeof(ListNode));
LinkList p=Head;
int a;
//循环输入(回车换行),直到ctrl+z停止输入
while(scanf("%d",&a)!=EOF){
LinkList q=(LinkList)malloc(sizeof(ListNode));
q->val=a;
q->next=NULL;
p->next=q;
p=p->next;
}
return Head;
}
逆置主体函数
LinkList ReverseList(LinkList Head){
LinkList q=Head->next;
LinkList r=q->next;
LinkList p=NULL;
Head->next=NULL;
while(r!=NULL){
q->next=p;
p=q;
q=r;
r=q->next;
}
q->next=p;
Head->next=q;
return Head;
}
按序输出
void display(LinkList p){
LinkList temp=p;
while(temp->next){
temp=temp->next;
printf("%d ",temp->val);
}
printf("\n");
}
主函数
int main(){
LinkList Head;
Head=Input();
display(Head);
ReverseList(Head);
display(Head);
return 0;
}