链表逆序的实现(修改指针)

该博客介绍了使用C语言实现链表操作。先建立普通链表,再通过修改指针的方式,将链表头尾颠倒,实现链表逆序,属于信息技术中数据结构相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用C语言,建立一个普通的链表后通过修改指针,将链表的头尾颠倒(逆序)

#include <stdio.h>
#include<stdbool.h>
#include<stdlib.h>

#define TYPE int 

typedef struct Node 
{
	TYPE data;
	struct Node* next;
}Node;

Node* creat_node(TYPE data)   //创建结点
{
	Node* node = malloc(sizeof(Node));
	node->data = data;
	node->next =NULL;
	return node;
}

typedef struct List
{
	Node* head;
	Node* tail;
	size_t size;
}List;


//创建链表
List* creat_list(void)
{
	List* list = malloc(sizeof(list));
	list->head = NULL;
	list->tail = NULL;
	return list;
}

//头添加
void head_add_list(List* list,TYPE data)
{
	Node* node = creat_node(data);
	if(0==list->size)
	{
		list->head=node;
		list->tail=node;
	}
	else
	{
		node->next=list->head;
		list->head=node;
	}
	list->size++;
}

//遍历
void show_list(List* list)
{
	for(Node* node = list->head;NULL!=node;node=node->next)
	{
		printf("%d  ",node->data);	
	}
	printf("\n");
};

//====================以上为建立链表及基本功能=====================//




//实现链表的逆序
void back(List* list)
{
	Node* p1 = list->head;
	Node* p2 = p1->next;	//p2指向原本链表的头的下一个
	list->tail = p1;		//将原本的链表的头变为新的链表的尾

	while(NULL!= p2->next)	//若p2的下一个不为空
	{
		Node* p3 =p2 ->next;	//p3指p2的下一个	
		p2->next =p1;			//p2的下一个指向p1
		p1 = p2;				//p1 变为 p2
		p2 = p3;				//p2 变为 p3
								// 交换指针
							
	}
								//当p2的下一个为空后跳出循环
		
	p2->next = p1; 				//p2 的下一个指向p1  
	list->head = p2;			//将p2变为链表的头 
	list->tail ->next = NULL; 	//链表的尾的下一个为NULL
		
}


int main()
{
	List* list = creat_list();		//创建一个链表
	for(int i=0;i<10;i++)				
	{
		head_add_list(list,i);		//为链表添加内容
	}
	show_list(list);    			//打印原链表
	
	back(list);						//倒序实现
	show_list(list);				//打印颠倒后的链表
}

具体表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值