`
u010815305
  • 浏览: 30476 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

反转链表

 
阅读更多
题目描述:

输入一个链表,反转链表后,输出链表的所有元素。
(hint : 请务必使用链表)

输入:

输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素。

输出:

对应每个测试案例,
以此输出链表反转后的元素,如没有元素则输出NULL。

样例输入:
5
1 2 3 4 5
0
样例输出:
5 4 3 2 1
NULL
我们需要设置三个指针,分别指向当前要反转的节点、当前要反转节点的前一个节点、当前要反转节点的下一个节点。要注意链表为空,以及只有一个头结点的情况。
#include<stdio.h>
#include<stdlib.h>
struct ListNode
{
	int      m_nValue;
	ListNode* m_pNext;
};
/*
  递归实现链表反转,需要三个指针pNode指向当前节点
	pPre指向反转后前节点
	pNext指向反转后后节点
*/
ListNode* reverseList(ListNode* pHead)
{
	if(pHead==NULL)
		return NULL;
		
	ListNode* pReversedHead=NULL;
	ListNode* pNode=pHead;
	ListNode* pPrev=NULL;
	
	while(pNode!=NULL)
	{
		ListNode* pNext=pNode->m_pNext;
		if(pNext==NULL)
			pReversedHead=pNode;
			
		pNode->m_pNext=pPrev;
		pPrev=pNode;
		pNode=pNext;
			
	} 
	return pReversedHead;
}

int main()
{
	int number;
	
	while(scanf("%d",&number)!=EOF)
	{
		int headData;
		scanf("%d",&headData);
		
		ListNode* pHead=(ListNode*)malloc(sizeof(ListNode));
		if(pHead==NULL)
			exit(0);
		pHead->m_nValue=headData;
		pHead->m_pNext=NULL;
		ListNode* pCur=pHead;
		for(int i=0;i<number-1;i++)
		{
			int pData;
			scanf("%d",&pData);
			ListNode* pNode = (ListNode*)malloc(sizeof(ListNode));
			if(pNode==NULL)
				exit(0); 
			pNode->m_nValue=pData;
			pNode->m_pNext=NULL;
			
			pCur->m_pNext=pNode;
			pCur=pCur->m_pNext; 
		}
			
			ListNode* headNode=reverseList(pHead);
			printf("%d",headNode->m_nValue);
	}

	
	return 0;
}
结果:
分享到:
评论

相关推荐

    反转链表的一般用法和递归用法

    反转链表是链表操作中的经典问题,它要求改变链表中节点的指向,使得原来的前后顺序反转。本文将详细介绍如何使用一般方法和递归方法来反转单向链表。 ### 一般方法(迭代法) **步骤**: 1. 定义三个指针`pre`、`...

    huashanqitu#labuladong-python3#递归思维:k 个一组反转链表1

    反转链表 迭代法## 逐个节点反转## 更新指针位置## 返回反转后的头结点反转 a 到 b 之间的结点反转区间 [a, b) 的元素,注意是左闭右开K 个一组

    代码_反转链表_

    反转链表是一个常见的数据结构问题,它涉及到对链表节点的重新排列,使得原链表的后继节点变成前驱节点。在这个问题中,我们使用Java语言来解决剑指Offer系列书籍中的第22题——反转链表。下面将详细探讨这个问题的...

    c语言基础-c语言编程基础之链表操作示例-反转链表.zip

    本资料包主要关注C语言编程中的链表操作,特别是反转链表这一核心技能。 首先,链表由一系列节点组成,每个节点包含两部分:数据域和指针域。数据域用于存储实际的数据,而指针域则指向下一个节点。链表可以是单向...

    Leetcode 反转链表.js

    LeetCode 206的题目是“反转链表”(Reverse Linked List),它要求将一个单链表的所有节点反转,并返回反转后链表的头节点。这是一个基础但非常重要的链表操作问题,它不仅考察了对链表数据结构的理解,还涉及到了...

    反转链表C实现

    ### 反转链表C实现 #### 知识点概览 本文将详细介绍如何使用C语言来实现链表的反转操作。链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。反转链表意味着重新组织这些...

    链表的反转 链表的翻转

    以下是一个简单的迭代反转链表的C++实现,利用了STL中的`list`容器: ```cpp #include #include void reverseList(std::list&lt;int&gt;& lst) { std::list&lt;int&gt;::iterator prev = lst.end(); std::list&lt;int&gt;::...

    反转链表,链表基础操作

    链表 反转链表,链表基础操作

    04-反转链表.md

    在本文件中,我们看到了一个主题为“04-反转链表”的内容,下面我将详细解析这个文件中的知识点。 首先,文件中提到了数据结构和算法在大厂前端面试中的重要性。数据结构是指一组数据的组织、管理和存储格式,它...

    java-leetcode题解之第206题反转链表.zip

    在本压缩包中,我们关注的是Java编程语言在解决LeetCode第206题——反转链表的问题。LeetCode是一个在线平台,它提供了一系列的编程挑战,帮助开发者提高算法技能和解决问题的能力。在这个问题中,目标是反转一个...

    lianbiao.rar_反转链表

    反转链表是链表操作中常见的问题,它的核心在于改变节点之间的链接关系,使得原来的后继节点变为前驱节点。在本案例中,我们讨论的是单向链表的反转,即将一个正向排列的链表如1-&gt;2-&gt;3,转换为反向排列的链表3-&gt;2-&gt;1...

    22.反转链表1

    在每次递归调用中,我们先反转链表的剩余部分(即`head-&gt;next`),然后将`head`与新反转后的链表的头节点连接,最后断开`head-&gt;next`的下一个节点,防止形成环。递归的终止条件是链表为空或只有一个元素,此时无需...

    python-leetcode面试题解之第206题反转链表-题解.zip

    本篇将深入探讨第206题——反转链表,这是一道常见的链表操作题目,对于理解和掌握链表的特性及其操作至关重要。 链表是一种线性数据结构,与数组不同,链表的元素并不在内存中连续存储。每个元素称为节点,包含两...

    python-leetcode面试题解之第92题反转链表II.zip

    本压缩包文件“python-leetcode面试题解之第92题反转链表II.zip”专注于Python语言,具体解决的是LeetCode中的第92题——反转链表II。这个题目是链表操作的经典实例,对于理解和掌握链表的特性和操作具有很高的价值...

    反转链表.md

    反转链表.md

    使用迭代和递归两种方法反转链表.docx

    ### 使用迭代和递归两种方法反转链表 在计算机科学中,链表是一种常见的数据结构,广泛应用于多种算法和数据处理场景中。反转链表是一个经典的面试题目,它不仅能够考察求职者的编程基础,还能检验其对递归的理解...

    python 实现 反转链表

    python 实现 反转链表

    【Leetcode刷题笔记03】203.移除链表元素 707.设计链表 206. 反转链表.md

    反转链表,记录了详细的题目解析思路以及Java语言的参考代码。 适合人群:学习算法和数据结构的程序员或学生,尤其是想系统学习链表操作的人。 能学到什么:掌握链表虚拟头节点设置方法;练习链表基本操作函数如增删...

    92反转链表 II.zip

    92反转链表 II.zip

Global site tag (gtag.js) - Google Analytics