C语言笔记31 •单链表经典算法OJ题-3.反转链表•

反转链表

1.问题

给你单链表的头节点 head,请你反转链表,并返回反转后的链表。

2.代码实现:

cpp 复制代码
//3.反转链表
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>



typedef int SLTDataType;

typedef struct SListnode
{
	SLTDataType val;
	struct SListnode* next;
}ListNode;

ListNode* createNode(SLTDataType val)
{
	ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
	if (newnode == NULL)
	{
		perror("malloc");
		exit(1);
	}
	newnode->val = val;
	newnode->next = NULL;
	return newnode;
}



struct ListNode* reverseList(struct ListNode* head)
{
	if (head == NULL)
	{
		return head;
	}
	ListNode* n1,*n2,*n3 ;
	n1= NULL, n2=head, n3=n2->next;//创建三个节点
	while (n2)
	{
		n2->next = n1;// 指针逆向
		n1 = n2;
		n2 = n3;
		if (n3)
		{
			n3 = n3->next;
		}
	}
	return n1;
}

int main()
{
	ListNode* node1, * node2, * node3, * node4, * node5;

	node1 = createNode(1);
	node2 = node1->next = createNode(2);
	node3 = node2->next = createNode(3);
	node4 = node3->next = createNode(4);
	node5 = node4->next = createNode(5);//创建一个链表

	ListNode* newhead = reverseList(node1);//反转链表

	while (newhead)
	{
		printf("%d ", newhead->val);
		newhead = newhead->next;
	}
	return 0;
}
相关推荐
艾莉丝努力练剑38 分钟前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
C++、Java和Python的菜鸟2 小时前
第六章 统计初步
算法·机器学习·概率论
Cx330❀2 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
散1122 小时前
01数据结构-Prim算法
数据结构·算法·图论
小幽余生不加糖3 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
起个昵称吧3 小时前
线程相关编程、线程间通信、互斥锁
linux·算法
..过云雨3 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
myzzb3 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa
旺小仔.4 小时前
双指针和codetop复习
数据结构·c++·算法
jingfeng5144 小时前
C++ STL-string类底层实现
前端·c++·算法