目录
前言
在学习完头插法创建单链表之后,了解到头插法可以实现链表元素的逆置,于是动手用代码在电脑上实现了一下,在实现的过程中我是将链表中的数据用头插法插入一个新链表NewL中来进行操作的。第一步我先建立了一个链表L,用键盘输入的方式使用头插法往L中插入数据;然后再建立了一个新链表NewL,通过使用一个指针p对链表L的数据从前往后进行遍历用头插法插入到新链表NewL里面,从而实现链表的翻转。
一、头插法是什么?
头插法是链表的一种创建方式,头插法是将新数据每次插入到头结点之后形成链表的一种方式。本文讲的是头插法的一种重要应用——实现链表的翻转。
二、代码实现
#include <stdio.h>
#include <stdlib.h>
//定义数据类型
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//头插法建表
void HeadInsert(LinkList &L){
int x;//x用于存储键盘输入的数据
LNode *s;//建立新节点指针s
printf("请输入:\n");
scanf("%d",&x);
//通过循环头插实现链表L的创建
while(x!=9999){//9999代表特殊数据,用于结束循坏,可改成其他数据
s=(LNode*)malloc(sizeof(LNode));//为指针s分配空间
s->data=x;
s->next=L->next;
L->next=s;
printf("请输入:\n");
scanf("%d",&x);
}
}
//打印链表的函数
void PrintL(LinkList L){
LNode *p=L;
printf("单链表为:\n");
//循环遍历
while(p->next!=NULL){
p=p->next;
printf("%d->",p->data);
}
printf("NULL\n");
}
//链表逆置
void A(LinkList &L,LinkList &NewL){
LNode *p=L;
while(p->next!=NULL){
LNode *s=(LNode*)malloc(sizeof(LNode));
p=p->next;
s->data=p->data;
s->next=NewL->next;
NewL->next=s;
}
}
//启动
int main(){
LinkList L;//创建表L
L=(LinkList)malloc(sizeof(LNode));//为表L分配空间
LinkList NewL=(LinkList)malloc(sizeof(LNode));//创建新表NewL逆置旧表L
NewL->next=NULL;//置空
L->next=NULL; //置空
HeadInsert(L);
PrintL(L);//打印表L
A(L,NewL);//逆置操作
printf("逆置后");
PrintL(NewL);//打印新表NewL
return 0;
}
三、运行结果
总结
以上就是今天要讲的内容,本文仅仅简单介绍了头插法的实现和应用。