单链表逆序

博客介绍单链表逆序功能,可逆转链表并返回逆转后的头结点,给出了单链表的结点结构,还提供了函数原型 Node ReverseList(Node head)。

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

单链表逆序
功能:逆转链表,并返回逆转后的头结点,(给出单链表的结点结构)
typedef struct _node
{
int data;
struct _node * next;
}Node;
函数原型:Node
ReverseList(Node head);

#include <stdio.h>
#include <stdlib.h>
typedef struct _node
{
     int data;
     struct _node * next;
}Node;

void tail_insert(Node *head,Node *new_node)
{
	Node *p = head;
	if(p->next == NULL) 
	{
		head->next = new_node;
		new_node->next = NULL;
	}
	else
	{
		while(p->next!=NULL)
		{
			p = p->next;
		}
		p->next = new_node;
		new_node->next = NULL;
	}
}

Node *ReverseList(Node **head)
{
	Node *p1,*p2,*p3;
	p1 = (*head)->next;
	p2 = p1->next;
	p3 = NULL;
	while(p2 != NULL)
	{
		p3 = p2->next;
		p2->next = p1;
		p1 = p2;
		p2 = p3; 
	}
	p2 =(*head)->next;
 	p2->next = NULL;
 	(*head)->next = p1;
 	return *head;
}
//Node* nixu(Node **head)    //无表头 
//{
//	Node *p1,*p2,*p3;
//	p1 = (*head);
//	p2 = p1->next;
//	p3 = NULL;
//
//	while(p2)
//	{
//		p3 = p2->next;
//		p2->next = p1;
//		p1 = p2;
//		p2 = p3;
//	}
//	(*head)->next = NULL;
//	(*head) = p1;
//	return (*head);
//
//}
void display(Node *head)
{
	Node *p = head;
	while(p->next !=NULL)
	{
		p = p->next;
		printf("%d\t",p->data);
	}
}
void release(Node **head)
{
	Node *p;
	while(*head != NULL)
	{
		p = *head;
		*head = (*head)->next;
		free(p);
	}
}

int main()
{
	int i =0;
	int num = 0;
	Node *new_node;
	Node *head = (Node*)malloc(sizeof(Node));
	head->next = NULL;
	for(i= 0;i<10;i++)
	{
		new_node = (Node*)malloc(sizeof(Node));
		new_node->data = i;
		tail_insert(head,new_node);
		
	}
	display(head);
	printf("\n");
    ReverseList(&head);
	display(head);
	release(&head);
	return 0;		
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值