用C++实现单链表的创建、逆置和输出 的两种方法
http://blog.csdn.net/lfeng_coding/article/details/47300563
题目描述:在已知单链表头节点的情况下,设计算法逆置单链表并输出
方法一:采用首先将头节点指向空,让其变为尾节点,然后利用中间节点 p、q 将其后的节点一个接一个改为指向前面的节点
/****************************
*作者:刘峰
* 时间:2015\8\5
* 环境:VS2013
* 功能:实现创建一个节点可控的单链,并逆置输出
****************************/
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- struct List
- {
- int num;
- List *next;
- };
- List *createList(int n) //创建含有n个节点的单链表
- {
- List *head, *p, *q;
- q=head = NULL; //初始化表头和中间指针
- int i;
- for (i = n; i > 0; --i)
- {
- p = new List; //申请空间,创建第一个节点
- cin >> p->num; //往节点中存入数据信息
- if (head == NULL)
- {
- head = p;
- }
- else
- {
- q->next = p;
- }
- q = p;
- }
- q->next = NULL;
- return head;
- }
- List *ReverseList(List *head) //逆置单链表
- {
- List *p, *r; //定义两个中间节点,用于顺移逆置链表节点
- if (head->next == NULL)
- return head;
- p = head; //获取头节点地址
- r = p->next; //获取链表第二个节点地址
- p->next = NULL; //头节点变为尾节点,原链表表头指向空
- while (r)
- {
- p = r;
- r = r->next;
- p ->next = head; //使第二个节点指向原先的头节点
- head = p; //使第二个节点变为头节点,用于循环逆置
- }
- return head;
- }
- void print(List *head) //输出逆置后的单链表
- {
- List *p;
- p = head;
- while (p)
- {
- cout<<p->num;
- p = p->next;
- cout << " ";
- }
- cout << endl;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- List *p, *q;
- cout << "请输入单链表的节点个数:";
- int n;
- cin >> n;
- cout << endl;
- cout << "创建一个节点为" << n << "的单链表" << endl;
- p = createList(n);
- cout << endl;
- cout << "这步为程序逆置单链表" << endl;
- q = ReverseList(p);
- cout << endl;
- cout << "打印逆置后的单链表" << endl;
- print(q);
- cout << endl;
- return 0;
- }
方法二:用p,q指向单链表中相邻的两节点,将r指向q的下一个结点,然后同步后移。当q=NULL时,表示指向原单链表的尾结点,将p赋值为头节点 head 即可。
逆置函数代码如下(其他部分不变):
List *ReverseList(List *head)
{
List *p, *q, *r;
p = head;
if (p->next == NULL)
return head;
q = p->next;
while (q != NULL) //q为空,说明p为最后一个节点,所以结束while后将q赋值给head,作为逆置后的表头
{
r = q->next;
q->next = p;
p = q;
q = r;
}
head->next = NULL; //将原head变为逆置后链表的表尾
head = p; //逆置后新的表头
return head;
}
用C++实现单链表的创建、逆置和输出 的两种方法相关推荐
- 对单链表实现就地逆置
对单链表实现就地逆置 /* 对单链表实现就地逆置 */ #include <stdio.h> #include "malloc.h"typedef struct LNo ...
- 借助栈实现单链表的原地逆置
借助栈实现单链表的原地逆置 [问题描述]首先建立一个单链表,通过栈实现该链表的原地逆置,注意仅使用链表中的原有的结点空间,结点的数据成员为int型.注意这个题需要单链表和栈两个类. [输入形式]输入只 ...
- 【单链表】单链表的就地逆置
编写算法实现带头结点单链表seqlist的就地逆置,即利用原带头结点单链表seqlist的结点空间,把数据元素顺序排反 题目分析: 在前面2-18讲了顺序表的就地逆置,但单链表的就地逆置与顺序表有所不 ...
- java实现单链表就地逆置,单链表的就地逆置讲解
{ List *q; List *p = L->next; L -> next = NULL; //单链表就地逆置 while (p != NULL) { q = p -> next ...
- c语言字符就地逆置,高手看看我的C语言代码单链表实现就地逆置
高手看看我的C语言代码单链表实现就地逆置 单链表实现就地逆置#include #include struct type{ int date; struct type * next;}first;int ...
- 对带头结点的单链表实现就地逆置的算法分析
试写一算法,对单链表实现就地逆置. 实现下列函数: void Inverse(LinkList &L); /* 对带头结点的单链表L实现就地逆置 */ 单链表类型定义如下: typedef ...
- 用new创建一个二维数组,有两种方法,是等价的
//用new创建一个二维数组,有两种方法,是等价的 一: int (*p)[10] = new int[5][10]; 二: int **p ...
- python实现带头结点的单链表的就地逆置_设头指针为head,编写算法实现带头结点单链表head的就地逆置...
链表问题大全!!!刚出炉的还热乎呢!! #include #include typedef struct node { int nDate; struct node *pstnext; }Node; ...
- 单链表反转(逆置)——(四种方法实现)
链表逆置就是把最后一个数据提到最前面,倒数第二个放到第二个--依次类推,直到第一个到最后一个. 由于链表没有下标,所以不能借助下标来实行数据的逆置,要靠空间的转移来完成链表的逆置,这里采用没有头节点的 ...
最新文章
- vue修改计算属性的值_vue之计算属性
- ORACLE的analyze及生成方式
- 数据库原理 知识点总结
- GdiPlus[30]: IGPPen: 线帽
- Java Stream:第2部分,计数始终是计数吗?
- 64位CentOS6.2安装erlang及rabbitmqServer
- 282. Expression Add Operators
- HTML解析没有详情页url,爬虫找不到详情页URL的参数
- mysql gman do_使用MySQL UDFs来调用gearman分布式任务分发系统
- 本来都对象棋失去兴趣了, 是特殊的原因让我又开始从侧面搞象棋方面的擦边的游戏...
- 基于SSM框架开发的社区疫情管理系统 附带详细运行指导视频
- paraview:python脚本
- SolidWorks软件远程安装协助
- 如何利用树莓派制作路由器
- BADI 和BAPI 的区别
- 超常用的Python代码片段 | 备忘单
- SCT2330CTVBR
- Docker集群(一) —— Docker网络及flannel介绍
- 阅读感悟《给中年程序员的温暖人心的巴比奇的故事》
- 为什么我的世界服务器显示红叉,小学生在试卷上答题画《我的世界》合成表?玩家:玩MC上头了!...
热门文章
- jquery获得下拉框的值
- 即时聊天IM之二 openfire 整合现有系统用户
- Redis-主从复制
- Jquery 寻找父、子、兄弟节点
- 服务器角色与数据库角色
- vue lang_新疆人的“lang”是“浪”吗?
- windows 检查cuda安装_Windows云主机GPU驱动-CUDA安装使用
- 卡方线性趋势检验_SPSS:趋势卡方检验
- 常见问题_智能切膜机常见问题
- android dropbox anr分析,Android如何分析排查ANR