一.题目描述

已知一个链表的结点结构为:

struct Node
{int data;Node *next;
};
typedef struct Node Node;

已知链表的头结点head,写一个函数把这个链表逆序

二.算法分析

从链表头部开始,建立三个临时节点的引用,分别为p1,p2,p3。它们分别指向头节点、第二个节点、第三个节点。

1.以p2节点为视角,把p2节点原本指向p3的next指针倒转,指向p1。如图:

2.将三个临时节点引用p1,p2,p3分别向后移动一格位置。

3.重复第1步的工作,以p2节点为视角,把p2节点原本指向p3的next指针倒转,指向p1。

4.重复第2步的工作,三个临时节点引用p1,p2,p3分别向后移动一格位置。

5.继续像这样子迭代下去,一直到p3是空为止。

6.最后,把head节点的next指向空,成为逆序链表的尾节点。并且把p1赋值给head,让p1所在的节点成为逆序链表的头节点。(补充:或者p2给head也可以,即为带头结点的链表,头结点的data置空)

图片由来

三.参考代码

Node * ReverseList(Node *head) //链表逆序
{if ( head == NULL || head->next == NULL )return head;Node *p1 = head ;Node *p2 = p1->next ;Node *p3 = p2->next ;p1->next = NULL ;while ( p3 != NULL ){p2->next = p1 ;p1 = p2 ;p2 = p3 ;p3 = p3->next ;}p2->next = p1 ;head = p2 ;return head ;
}

【数据结构】链表逆序相关推荐

  1. c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  2. 数据结构:链表逆序输出

    数据结构(一):链表逆序输出 题目描述:创建一个链表,并将链表逆序输出,链表中以输入0作为结束 关键代码详解: 附:全部代码 #include<stdio.h> #include<s ...

  3. c语言实现链表的逆序输出,C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  4. 数据结构:闲敲棋子落灯花之链表逆序输出Reverse

    链表逆序输出 首先,我们需要了解,逆序输出不是把数据对应位置改变,而是仅仅改变链接顺序. 方法一:迭代链表.使用循环,遍历链表,每一步,反转一个链接. 方法二:递归. 方法一: 过程:先使第一个结点指 ...

  5. c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例

    单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序.本文就分别实例讲述一下两种方法.具体如下: 1.逆序输出 实例代码如下: #include #include #inc ...

  6. 链表逆序——就地逆序

    链表逆序 1.问题描述 给定一个带头结点的单链表,请将其逆序.即如果单链表原来为head->1->2->3->4->5->6->7,则逆序后变为head-&g ...

  7. c语言递归链表逆序,链表逆序的递归实现

    链表逆序是个很基础的算法,考察的是指针操作和基本数据结构.常规的写法当然是OK的,不过要是还会写出一个递归的链表逆序算法,那别人肯定要给你点个赞了. 1 问题描述 给定一个链表,请将其逆序.即如果链表 ...

  8. c语言 链表倒序,C语言链表逆序方法技巧

    C语言链表逆序方法技巧 C语言有丰富的数据结构和运算符.包含了各种数据结构,如整型.数组类型.指针类型和联合类型等,用来实现各种数据结构的运算.下面是小编为大家搜索整理的C语言链表逆序方法技巧,希望大 ...

  9. C语言的单链表逆序和指定范围逆序

    文章目录 前言 逆序 指定范围逆序 源码实现 前言 关于链表的逆置,是考察对链表指针的理解.知道了如何不实用额外空间,同时使用O(n)复杂度对链表进行逆序之后将会对链表有好理解. 同时关于如何在指定范 ...

最新文章

  1. 《算法导论》学习总结 — 13. 第13章 红黑树(2)
  2. C# 串口编程 — MVVM MVVM Light 实例
  3. CentOS firewall添加开放端口
  4. oracle死锁trace,Oracle 学习之性能优化(十)锁
  5. Full Tank?
  6. 易学性vs易用性,产品应该选哪边?
  7. linux qt 触摸屏事件,利用触摸屏获取事件坐标
  8. iovec结构体定义及使用 (转)
  9. 视音频处理大神-雷霄骅
  10. 国产龙芯笔记本(on 龙芯2F)的使用体验
  11. mysql数据库,语法语句总结。以及事务理解-基础篇
  12. 随机数生成器python
  13. js ajax实现五极联动,前端见微知著AngularJS备忘篇:温故而知新,可以为师矣
  14. 佐切的第四天学习分享
  15. Gremlin 基础知识
  16. python交互方式是什么意思_python交互模式是什么
  17. 【再也不怕pdf转换了】使用Python实现PDF扫描件生成DOCX或EXCEL
  18. 基于RuoYi框架快速搭建自己的后台管理系统
  19. Android开发3年,4个月面试,终于拿到小米、京东、字节大厂offer
  20. 微信小程序 -数字滚动动画

热门文章

  1. 代数余子式之和怎么算_11.初中数学:xy4x+6y5,怎么因式分解?分组配方法再平方差...
  2. 空间分析:3-3.geoda计算莫兰指数
  3. 【华为Share】多屏协同和一碰传踩坑分享
  4. Share X更改保存路径
  5. 学习java重在实践
  6. ESP8266 TCP 调试问题 MALLOC问题
  7. C艹多线程循环打印队列或者数字
  8. 老照片修复软件哪个好?这些软件值得收藏
  9. 阿里大于短信使用方法
  10. android之通过MediaRecorder进行手机录音