#include<stdio.h>
#include<stdlib.h>
/*链表节点定义*/
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode, *LinkList; //定义节点,头指针类型名
/*尾插法创建单链表*/
void Create_LinkList_B(LinkList &L)
{
int x, cycle = 1;
Lnode *p, *s;
L=(LinkList)malloc(sizeof(Lnode)); //生成头结点
L->next = NULL;
p=L;
while(cycle) //循环接受输入节点数据,-1结束输入
{
printf("x = ?\n");
scanf("%d", &x);
if(x != -1)
{
s=(Lnode *)malloc(sizeof(Lnode)); //生成新节点
s->data = x;
p->next = s; //把新节点插入链表尾部
p = s; //p指针再次指向尾节点
}
else
{
cycle = 0; //输入-1,改变循环变量,不接受新节点
}
}
p->next = NULL;
}
/*单链表的逆置*/
void Reverse_LinkList(LinkList &L)
{
Lnode *p, *q;
p = L->next; //P指向链表第一个元素
L->next = NULL; //断开头结点与链表
while(p != NULL)
{
q = p;
p = p->next;
q->next = L->next; //相当于前插法构建新的链表,和原来的相反
L->next = q;
}
}
/*打印单链表*/
void Print_LinkList(LinkList &L)
{
Lnode* p;
p = L->next; //L是头指针,p指向第一个节点,开始打印
while(p != NULL)
{
printf("%d\n", p->data);
p = p->next;
}
}
/*测试函数*/
int main()
{
LinkList H; //声明头指针
Create_LinkList_B(H);
printf("现在开始打印链表\n");
Print_LinkList(H);
printf("-----逆置之后的链表-----\n");
Reverse_LinkList(H);
Print_LinkList(H);
return 0;
}
单链表逆置
最新推荐文章于 2023-07-06 16:06:41 发布