`
ijavagos
  • 浏览: 1247945 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

链表逆序

 
阅读更多

http://blog.csdn.net/yxh0823/article/details/6080163

设链表节点为

  1. typedefstructtagListNode{
  2. intdata;
  3. structtagListNode*next;
  4. }ListNode,*List;

  1. typedefstructtagListNode{
  2. intdata;
  3. structtagListNode*next;
  4. }ListNode,*List;

要求将一带链表头List head的单向链表逆序。

分析:

1). 若链表为空或只有一个元素,则直接返回;

2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;

3). 重复2),直到q为空

4). 调整链表头和链表尾

示例:以逆序A->B->C->D为例,图示如下

实现及测试代码如下:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedefstructtagListNode{
  4. intdata;
  5. structtagListNode*next;
  6. }ListNode,*List;
  7. voidPrintList(Listhead);
  8. ListReverseList(Listhead);
  9. intmain()
  10. {
  11. //分配链表头结点
  12. ListNode*head;
  13. head=(ListNode*)malloc(sizeof(ListNode));
  14. head->next=NULL;
  15. head->data=-1;
  16. //将[1,10]加入链表
  17. inti;
  18. ListNode*p,*q;
  19. p=head;
  20. for(inti=1;i<=10;i++)
  21. {
  22. q=(ListNode*)malloc(sizeof(ListNode));
  23. q->data=i;
  24. q->next=NULL;
  25. p->next=q;
  26. p=q;
  27. }
  28. PrintList(head);/*输出原始链表*/
  29. head=ReverseList(head);/*逆序链表*/
  30. PrintList(head);/*输出逆序后的链表*/
  31. return0;
  32. }
  33. ListReverseList(Listhead)
  34. {
  35. if(head->next==NULL||head->next->next==NULL)
  36. {
  37. returnhead;/*链表为空或只有一个元素则直接返回*/
  38. }
  39. ListNode*t=NULL,
  40. *p=head->next,
  41. *q=head->next->next;
  42. while(q!=NULL)
  43. {
  44. t=q->next;
  45. q->next=p;
  46. p=q;
  47. q=t;
  48. }
  49. /*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/
  50. head->next->next=NULL;/*设置链表尾*/
  51. head->next=p;/*调整链表头*/
  52. returnhead;
  53. }
  54. voidPrintList(Listhead)
  55. {
  56. ListNode*p=head->next;
  57. while(p!=NULL)
  58. {
  59. printf("%d",p->data);
  60. p=p->next;
  61. }
  62. printf("/n");
  63. }

分享到:
评论

相关推荐

    c++链表逆序的几种方法

    C++链表逆序的几种方法 C++链表是一种常用的数据结构,它可以用来存储和操作大量的数据。链表逆序是指将链表中的元素顺序颠倒,这样可以实现一些特殊的操作,例如逆序输出链表中的元素。下面将介绍C++链表逆序的几...

    链表逆序输出

    本示例中的“链表逆序输出”是一个典型的Java编程问题,旨在帮助初学者理解链表的操作以及如何通过代码实现逆序输出。下面我们将深入探讨这个主题。 链表与数组不同,它不连续存储数据,而是通过节点之间的引用关系...

    C++链表逆序经典实现

    IT公司最常见笔试题。2010-06-07编写。欢迎讨论。 QQ:114723704

    renzg#tech-document#1.1 如何实现一个高效的单向链表逆序输出?1

    问题:如何实现一个高效的单向链表逆序输出?出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。

    笔试题之链表逆序A->B->C to C->B>A

    本题目的核心是“链表逆序”,这是一个常见的编程面试和笔试问题,主要考察程序员对链表操作的理解和实现能力。接下来,我们将详细讨论链表逆序的概念、方法以及如何使用C++进行实现。 链表逆序,顾名思义,就是将...

    shujujiegou.rar_线性链表_链表逆序

    本资料"shujujiegou.rar_线性链表_链表逆序"聚焦于线性链表的查找、删除、逆序和顺序操作,这些都是数据结构课程设计中常见的任务。 1. **线性链表的结构** 线性链表由一系列节点组成,每个节点包含两部分:数据域...

    链表逆序实验C语言源代码

    ### 链表逆序实验C语言源代码分析 #### 一、概述 本文将对一个使用纯C语言实现的链表逆序程序进行详细解析。该程序包含链表的创建、打印、逆序以及销毁等功能,非常适合C语言初学者理解和学习。 #### 二、程序...

    C语言数据结构实现链表逆序并输出

    首先,要实现链表逆序并输出的功能,我们需要构建一个基本的链表结构。在C语言中,通常会定义一个结构体来表示链表的节点(Node),其中包含数据域(value)和指向下一个节点的指针域(next)。接着,我们还需要一个...

    链表逆序算法,最简单的算法

    链表逆序算法,最简单的算法,有些算法可以不必自己写出,会用就可以,比如这个算法,很简单,很有效,代码整洁清晰

    如何实现一个高效的单向链表逆序输出.docx

    单向链表逆序输出在实际编程中有很多应用,例如在数据结构操作、算法问题、以及某些特定业务逻辑中。在实现时,需要注意以下几点: - 避免空指针异常:在操作链表之前,要先检查头节点是否为空。 - 节点的指针操作...

    1.1.1 如何实现一个高效的单向链表逆序输出?.md

    1.1.1 如何实现一个高效的单向链表逆序输出?

    OliviaGan#interview-reference#1.1.1 如何实现一个高效的单向链表逆序输出?1

    问题:如何实现一个高效的单向链表逆序输出?出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。

    主要讲述以http://blog.csdn.net/LCL_data/archive/2009/12/09/4974499.aspx中的链表逆序为模板来讲述指针的使用

    主要讲述以http://blog.csdn.net/LCL_data/archive/2009/12/09/4974499.aspx中的链表逆序为模板来讲述指针的使用

    C语言解字符串逆序和单向链表逆序问题的代码示例

    本文将深入探讨如何使用C语言解决字符串逆序和单向链表逆序的问题,这些都是编程面试和研究生考试中的常见题型。 ### 字符串逆序 字符串逆序是指将一个给定的字符串的字符顺序反转。在C语言中,我们可以使用递归...

    C语言链表逆序技巧

    简洁的做法是  遍历链表,  元素进栈,  遍历的同时销毁原来的链表。  元素出栈,  建立新链表。  高效的是,

    C++练习-逆序链表的输入输出

    数据结构课程练习---------------------------------------逆序链表的输入输出

    C语言链表操作(新增单向链表的逆序建立)

    C语言链表的各种操作,链表是各种发杂数据结构的基础,掌握链表很重要。。。

    单链表逆序

    单链表逆序是数据结构领域中的一个常见操作,它涉及到对链表节点顺序的反转。在本场景中,我们将详细探讨如何实现这个过程,包括单链表的基本概念、逆序算法的步骤以及如何在实际编程中应用这些概念。 首先,我们...

Global site tag (gtag.js) - Google Analytics