单链表逆置

#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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值