单链表的就地逆置——头插法
采用头插法的思想,将单链表就地逆置。
代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
int main(){
LinkList L,p,q,r,s;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
//尾插法建表
r = L;
int x,n;
printf("请输入结点个数:");
scanf("%d",&n);
printf("输入结点:\n");
for(int i=0;i<n;i++){
scanf("%d",&x);
p = (LinkList)malloc(sizeof(LNode));
p->data = x;
r->next = p;
r = p;
}
r->next = NULL;
printf("输出:\n");
p = L->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
printf("\n逆置:\n");
//逆置
p = L->next->next; //从第二个结点开始
s = L->next;
while(p){// 头插法逆置
q = p;
r = p->next; //保存下一结点
q->next = L->next;
L->next = q;
p = r;
}
s->next = NULL;
p = L->next;
while(p){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return 0;
}
运行结果: