`
阿尔萨斯
  • 浏览: 4170400 次
社区版块
存档分类
最新评论

数据结构 - 反转单链表的递归算法(C++)

 
阅读更多

#include <iostream>

#define NULL 0

using namespace std;

struct Node
{
	char  data;
	Node* next;
};

Node* create()
{
	Node* head = NULL;
	Node* rear = head;
	Node* p; // The pointer points to the new created node.
	char  tmp;

	do
	{
		cout << "Please input integer or char '#':";
		cin >> tmp;
		if(tmp != '#')
		{
			p = new Node;
			p->data = tmp;
			p->next = NULL;

			if(head == NULL)
			{
				head = p;
			}
			else
			{
				rear->next = p;
			}
			rear = p;
		}
	}
	while(tmp != '#');

	return head;
}

void print(Node* head)
{
	cout << "The current list is: ";
	Node* p = head;
	if(head != NULL)
	{
		do
		{
			cout << p->data << cout << ' ';
			p = p->next;
		}
		while(p != NULL);
	}
	cout << "\r\n";
}

Node* reverseSingleLinkedListRecursive(Node* p, Node*& head)
{
	if(p == NULL || p->next == NULL)
	{
		head = p;
		return p;
	}

	Node* tmp = reverseSingleLinkedListRecursive(p->next, head);
	tmp->next = p;
	p->next = NULL; // To prevent forming a ring.
	return p;
}

int main()
{
	Node* list = create();
	print(list);
	reverseSingleLinkedListRecursive(list, list);
	print(list);

	return 0;
}

// Output:
/*
Please input integer or char '#':1
Please input integer or char '#':2
Please input integer or char '#':4
Please input integer or char '#':6
Please input integer or char '#':3
Please input integer or char '#':8
Please input integer or char '#':7
Please input integer or char '#':9
Please input integer or char '#':0
Please input integer or char '#':#
The current list is: 10F69C3E8 20F69C3E8 40F69C3E8 60F69C3E8 30F69C3E8 80F69C3E8 70F69C3E8 90F69C3E8 00F69C3E8
The current list is: 00F69C3E8 90F69C3E8 70F69C3E8 80F69C3E8 30F69C3E8 60F69C3E8 40F69C3E8 20F69C3E8 10F69C3E8
*/
分享到:
评论

相关推荐

    C++数据结构与算法之反转链表的方法详解

    本文实例讲述了C++数据结构与算法之反转链表的方法。分享给大家供大家参考,具体如下: 算法概述:要求实现将一条单向链表反转并考虑时间复杂度。 算法分析: 数组法(略): 将列表元素逐个保存进数组,之后再逆向...

    全排列——递归排序和字典序列

    全排列算法有两个比较常见的实现:递归排列和字典序排列。 (1)递归实现 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。 (2)字典...

    leetcode双人赛-c-cpp-DSA:在我的大学课程之外完成的C和C++数据结构和算法

    数据结构和算法 目录 概述 这个存储库用于我在学校工作之外做的小型 C 和 C++ 程序。 该存储库包括我为实践所做的数据结构和算法。 展开以下部分以了解有关每个程序的更多信息。 随意 fork 这个存储库并自己处理一些...

    leetcode会员怎么买便宜-leetcode:javascript数据结构和算法

    对于前端工程师来说,最常用的是html、css、js,数据结构和算法薄弱 前端开发门槛低、人员参差不齐 前端开发只会写页面,不懂算法,伪程序员 面试考算法,通过率极低 看过c、c++、java版算法,javascript不会写 怎么...

    (Garbage Collection)扫描版——part1

    2.1.4 环形数据结构 2.2 标记——清扫算法 2.2.1 算法 2.2.2 标记——清扫算法的优势和弱点 2.3 节点复制算法 2.3.1 算法 2.3.2 一个例子 2.3.3 节点复制算法的优势和弱点 2.4 比较标记——清扫技术和节点复制技术 ...

    《垃圾收集》(Garbage Collection)扫描版[PDF]——part2

    2.1.4 环形数据结构 2.2 标记——清扫算法 2.2.1 算法 2.2.2 标记——清扫算法的优势和弱点 2.3 节点复制算法 2.3.1 算法 2.3.2 一个例子 2.3.3 节点复制算法的优势和弱点 2.4 比较标记——清扫技术和节点复制技术 ...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    LeetCode解题总结

    2.2 指定位置反转单链表 2.3 依据给定值将链表重新排序 2.4 删除链表中重复元素 2.5 指定位置旋转链表 2.6 删除倒数第N个节点 2.7 成对交换链表元素 2.8 复制复杂链表 2.9 链表环相关问题 2.9.1 链表是否有环 2.9.2 ...

    leetcode2sumc-DSA:此repo包含与DSA相关的所有代码

    leetcode 2 和 c 动态安全协议 ...构建数据结构/选择正确的数据结构 你可能需要 OOP 二进制搜索:) logn 复杂度 - 每次都减少到 1/2 - 所以 log base 2,这就是逻辑 快速排序在类似的线路上实现 复杂性和大

    leetcode2sumc-CipherSchools_Assignment:ciphershcoll和讲座代码的所有分配

    C/C++ 程序(简单) 排序 0 1 2(中) 替代排序(简单) K 最小元素(硬) 计数反转(硬) GeeksForGeeks - 收集雨水(硬) 股票买卖以最大化利润(中) 以螺旋形式打印给定矩阵(中) 按行和按列排序的二维数组中的...

    OceanFFT:OpenGL演示

    FFT的Stockham公式用于更好地将问题映射到GPU并避免香草Cooley-Tukey算法所需的昂贵的位反转操作。制作说明通过git clone --recurse-submodules git://github.com/achalpandeyy/OceanFFT.git与子模块递归git clone ...

    leetcode中国-LeetCode:力扣解决方案

    使用C++实现的 已学习到的知识总结 左神算法课 L00 04 反转单向链表和双向链表 用curr,prev,next注意不要断链 在行和列都排好序的矩阵中找数,从右上角开始 打印两个单链表的相交的问题,注意还要考虑有环没有。 ...

    Interview-Coding-Question:1.分叉存储库2.进行所需的更改(adddeletemodify)3.发出拉取请求

    字符串反转 2个 不使用strlen的字符串长度 3 阶乘使用递归 4 斐波那契使用递归 5 数字位数 6 阿姆斯特朗数 7 倒数 8 阶乘 9 斐波那契系列 10 回文数 11 2号LCM 12 是否灌注 13 空心矩形 如何...

Global site tag (gtag.js) - Google Analytics