http://blog.csdn.net/yxh0823/article/details/6080163
设链表节点为
-
typedefstructtagListNode{
-
intdata;
-
structtagListNode*next;
-
}ListNode,*List;
-
typedefstructtagListNode{
-
intdata;
-
structtagListNode*next;
-
}ListNode,*List;
要求将一带链表头List head的单向链表逆序。
分析:
1). 若链表为空或只有一个元素,则直接返回;
2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;
3). 重复2),直到q为空
4). 调整链表头和链表尾
示例:以逆序A->B->C->D为例,图示如下
实现及测试代码如下:
-
#include<stdio.h>
-
#include<stdlib.h>
-
-
typedefstructtagListNode{
-
intdata;
-
structtagListNode*next;
-
}ListNode,*List;
-
-
voidPrintList(Listhead);
-
ListReverseList(Listhead);
-
-
intmain()
-
{
-
//分配链表头结点
-
ListNode*head;
-
head=(ListNode*)malloc(sizeof(ListNode));
-
head->next=NULL;
-
head->data=-1;
-
-
//将[1,10]加入链表
-
inti;
-
ListNode*p,*q;
-
p=head;
-
for(inti=1;i<=10;i++)
-
{
-
q=(ListNode*)malloc(sizeof(ListNode));
-
q->data=i;
-
q->next=NULL;
-
p->next=q;
-
p=q;
-
}
-
-
PrintList(head);/*输出原始链表*/
-
head=ReverseList(head);/*逆序链表*/
-
PrintList(head);/*输出逆序后的链表*/
-
return0;
-
}
-
-
ListReverseList(Listhead)
-
{
-
if(head->next==NULL||head->next->next==NULL)
-
{
-
returnhead;/*链表为空或只有一个元素则直接返回*/
-
}
-
-
ListNode*t=NULL,
-
*p=head->next,
-
*q=head->next->next;
-
while(q!=NULL)
-
{
-
t=q->next;
-
q->next=p;
-
p=q;
-
q=t;
-
}
-
-
/*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/
-
head->next->next=NULL;/*设置链表尾*/
-
head->next=p;/*调整链表头*/
-
returnhead;
-
}
-
-
voidPrintList(Listhead)
-
{
-
ListNode*p=head->next;
-
while(p!=NULL)
-
{
-
printf("%d",p->data);
-
p=p->next;
-
}
-
printf("/n");
-
}
分享到:
相关推荐
C++链表逆序的几种方法 C++链表是一种常用的数据结构,它可以用来存储和操作大量的数据。链表逆序是指将链表中的元素顺序颠倒,这样可以实现一些特殊的操作,例如逆序输出链表中的元素。下面将介绍C++链表逆序的几...
本示例中的“链表逆序输出”是一个典型的Java编程问题,旨在帮助初学者理解链表的操作以及如何通过代码实现逆序输出。下面我们将深入探讨这个主题。 链表与数组不同,它不连续存储数据,而是通过节点之间的引用关系...
IT公司最常见笔试题。2010-06-07编写。欢迎讨论。 QQ:114723704
问题:如何实现一个高效的单向链表逆序输出?出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。
本题目的核心是“链表逆序”,这是一个常见的编程面试和笔试问题,主要考察程序员对链表操作的理解和实现能力。接下来,我们将详细讨论链表逆序的概念、方法以及如何使用C++进行实现。 链表逆序,顾名思义,就是将...
本资料"shujujiegou.rar_线性链表_链表逆序"聚焦于线性链表的查找、删除、逆序和顺序操作,这些都是数据结构课程设计中常见的任务。 1. **线性链表的结构** 线性链表由一系列节点组成,每个节点包含两部分:数据域...
### 链表逆序实验C语言源代码分析 #### 一、概述 本文将对一个使用纯C语言实现的链表逆序程序进行详细解析。该程序包含链表的创建、打印、逆序以及销毁等功能,非常适合C语言初学者理解和学习。 #### 二、程序...
首先,要实现链表逆序并输出的功能,我们需要构建一个基本的链表结构。在C语言中,通常会定义一个结构体来表示链表的节点(Node),其中包含数据域(value)和指向下一个节点的指针域(next)。接着,我们还需要一个...
链表逆序算法,最简单的算法,有些算法可以不必自己写出,会用就可以,比如这个算法,很简单,很有效,代码整洁清晰
单向链表逆序输出在实际编程中有很多应用,例如在数据结构操作、算法问题、以及某些特定业务逻辑中。在实现时,需要注意以下几点: - 避免空指针异常:在操作链表之前,要先检查头节点是否为空。 - 节点的指针操作...
1.1.1 如何实现一个高效的单向链表逆序输出?
问题:如何实现一个高效的单向链表逆序输出?出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。
主要讲述以http://blog.csdn.net/LCL_data/archive/2009/12/09/4974499.aspx中的链表逆序为模板来讲述指针的使用
本文将深入探讨如何使用C语言解决字符串逆序和单向链表逆序的问题,这些都是编程面试和研究生考试中的常见题型。 ### 字符串逆序 字符串逆序是指将一个给定的字符串的字符顺序反转。在C语言中,我们可以使用递归...
简洁的做法是 遍历链表, 元素进栈, 遍历的同时销毁原来的链表。 元素出栈, 建立新链表。 高效的是,
数据结构课程练习---------------------------------------逆序链表的输入输出
C语言链表的各种操作,链表是各种发杂数据结构的基础,掌握链表很重要。。。
单链表逆序是数据结构领域中的一个常见操作,它涉及到对链表节点顺序的反转。在本场景中,我们将详细探讨如何实现这个过程,包括单链表的基本概念、逆序算法的步骤以及如何在实际编程中应用这些概念。 首先,我们...