引言

将一个没有空结点作为头的单链表实现反转。其实质就是将结点的指针域指向反转。定义指向当前结点的指针,指向前一个结点的指针,指向当前结点的后一个结点的指针,这个过程中包含只有一个结点的单链表,那么反转之后还是它本身,只有两个结点的单链表,反转之后由第一个结点的指针指向第二个结点,第二个结点的指针域指向为空,变为第二个结点的指针指向第一个结点,第一个结点的指针域为空。当结点数大于二,便就是一系列结点指针指向的反转,最后记得将反转后的单链表的尾结点的指针指向空。

示例

下面是在vs2010上实现的单链表反序。

// reverseList.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;/***********************
功能:实现无头单链表的反序
包含的功能函数:
struct Node* createList(int n,int data)  创建n的结点的单链表,链表采用data++的形式增减每一个结点的值
struct Node* reverseList(struct Node **pList) 将但联编反序,大致的形式类似:1-》2-》3 反序后3-》2-》1
void printList(struct Node *pList)  输出;链表pList的结点元素
**********************/struct Node
{int num;struct Node *next;
};struct Node* createList(int n,int data)
{struct Node *ph = NULL;struct Node *pnow = NULL;struct Node *pLast = NULL;while (n >= 0){struct Node *pNode = new struct Node;pNode->next = NULL;pNode->num = data++;if(ph == NULL){ph = pNode;}pnow = pNode;if(pLast != NULL){pLast->next = pnow;}pLast = pnow;--n;}return ph;}struct Node* reverseList(struct Node **pList)
{struct Node *pre = *pList;//指向前一个结点struct Node *pCur = NULL;//指向当前结点struct Node *pNext = NULL;//指向当前结点的下一个结点if(pre->next != NULL){pCur = pre->next;if(pCur->next != NULL)//结点数最少为3个{pNext = pCur->next;pre->next = NULL;while(pCur){pCur->next = pre;if(pNext){pre = pCur;pCur = pNext;pNext = pNext->next;}else{break;}}return pCur;}else//只有两个结点{pCur->next = pre;pre->next = NULL;return pCur;}}else//只有一个结点{return pre;}
}void printList(struct Node *pList)
{struct Node *ph = pList;while(ph != NULL)//注意这里是结点不为空ph != NULL,不是结点的指针指向不为空ph->next != NULL{cout<<ph->num<<"\t";ph = ph->next;}cout<<endl;
}int _tmain(int argc, _TCHAR* argv[])
{struct Node *pList = createList(4,1);printList(pList);cout<<"================="<<endl;struct Node * ph = reverseList(&pList);printList(ph);system("pause");return 0;
}

程序的运行效果如下:

仅以记录。

C++实现单链表的反序相关推荐

  1. 单链表的逆序java_java 实现单链表的逆序

    package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedR ...

  2. 透彻理解回文~单链表的逆序~

    判断一个单链表是不是回文,主要有三种方法,不过如果要考虑空间复杂度的话,就只有常用的一种方法了. 这种方法很考验一个人的细心以及编程能力~ 前两种方法比较简单我就不祥述了~ 主要讲一下最后一种方法:直 ...

  3. 单链表实现一元多项式相加_python面试系列 01如何实现单链表的逆序

    题目介绍 来源:腾讯笔试                         难度系数:★★★☆☆                  考察频率:★★★★☆ 题目描述: 给定一个带头结点的单链表,请将其逆序 ...

  4. 【数据结构】单链表的逆序输出(两种方法)

    第一种方法:转换指针方向 即:将一个已经创建好的单链表进行指针域的改变 今天突然被问到单链表逆序的问题,弄了好久才看出别人的程序有啥问题,就重新写了一遍. 今天才在CSDN客户端上看到美团的面试题是冒 ...

  5. Java实现单链表的逆序打印

    思路1:可以将链表进行反转,然后进行数据的输出即可,单链表反转地址如下https://blog.csdn.net/Kevinnsm/article/details/113763272 这个思路1肯定有 ...

  6. 数据结构—链表—单链表应用-增序排列节点

    LinkList *p,*pre,*q; p=L->next->next; L->next->next=NULL; 单节点链表. 我们用p指针指向了第二个节点,然后把第一个节点 ...

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

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

  8. 单链表逆序的多种方式

    https://www.cnblogs.com/eniac12/p/4860642.html template<class T> void List<T>::Inverse() ...

  9. 【数据结构】单链表逆序

    编写算法,将一个结点类型为Lnode的单链表按逆序链接,即若原单链表中存储元素的次序为a1,--an-1,an,则逆序链接后变为,+an,an-1,--a1. Void contrary (Lnode ...

最新文章

  1. 算法:五分钟了解一致性hash算法
  2. 不擅长物理科学计算机吗,物理难学否?答案因人而异,高二同学3 + 3选科莫要太随意...
  3. 开发日记-20190417 关键词 代码之间耦合度的一刀两断 (思路篇)
  4. PHP设置二维码中间为logo
  5. 看本地网速_安装 ANSYS 本地帮助
  6. 【C#学习】delegate(委托) 和 event(事件)
  7. python爬虫从入门到放弃(一)之初识爬虫
  8. 使用jstat报告自定义JVM指标集
  9. mysql 表的存储类型_MySQL数据表存储引擎类型及特性
  10. 使用异或运算交换两个任意类型变量
  11. 【图解分布式架构】看不懂直接面壁
  12. MyBatis 动态 SQL 底层原理分析
  13. joblib多线程、多进程学习案例(三)
  14. Mysql中show命令详解
  15. 1053. 住房空置率 (20)-PAT乙级真题
  16. python的调用函数_Python函数调用
  17. HDU 1269 迷宫城堡 (强连通分量,常规)
  18. paip.WEB乱码的解决流程
  19. 繁星屠龙软件下载_酷狗繁星屠龙下载
  20. 个人晋升演讲ppt_晋升面试ppt自我展示演讲稿

热门文章

  1. 用手机写代码:基于 Serverless 的在线编程能力探索
  2. 阿里云云效技术专家分享:云原生开发、调测及可靠发布解决方案
  3. OPPO实时数仓揭秘:从顶层设计实现离线与实时的平滑迁移
  4. 美柚上云 致力成为最懂女人的互联网企业
  5. 阿里CTO张建锋:明年双11将大规模应用含光AI芯片
  6. PostgreSQL 优化器代码概览 1
  7. 秘籍分享:SLB实例克隆
  8. 性能突出的 Redis 是咋使用 epoll 的?
  9. 如果还不懂如何使用 Consumer 接口,就来看这篇!
  10. Mendix发布全球低代码报告,中国软件与低代码发展远超全球