单链表逆序(递归&非递归)

原创 2012年03月25日 13:54:08

结点定义:

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

方法一:

设置两个临时指针pre和ne分别标记当前指针的前驱和后继,将当前结点的next指针指向前驱,然后把前驱指针和当前指针往后移动,继续遍历,当然每次移动后都要重新标记当前结点的后继结点,代码如下:

void reverse(list *&head)
{
	if(list == NULL)
	{
		return ;
	}
	else
	{
		list *pre = head;
		list *cur = head->next;
		list *ne;
		while(cur != NULL)
		{
			ne = cur->next;
			cur->next = pre;
			pre = cur;
			cur = next;
		}
		head->next = NULL;
		head = pre;
	}
}

方法二:

采用递归的方式,如果要将当前结点逆序,那么先将它的后继结点都逆序,然后把逆序后的尾结点的next指向当前结点即可,要注意的是递归出口,我们选择链表为空或者只有一个结点的情况为递归出口,代码如下:

list *reverse(list *p, list *&head)
{
	if(p == NULL || p->next == NULL)
	{
		head = p;
		return p;
	}
	else
	{
		list *temp = reverse(p->next, head);
		temp->next = p;
		return p;
	}
}

单链表的逆序基本上就是以上两种思想,当然写法可以有很多,根据自己的理解能将其实现就行了。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

[综合面试] 大牛的面试神级总结之总结篇

(十):总结篇  本篇是我的系列文章的最后一部分:总结篇。    前面的文章里,已经把找工作过程中各个环节的经验和技巧详细的介绍给了大家。在这一篇里,我想从整体上把自己找工作这段时间积累的感悟和经...

单链表逆序的递归与非递归算法

既然前面写了字符串的递归逆序算法,那当然也想到了单链表逆序的递归与非递归算法。下面我就对此做下介绍。 结构体定义如下: typedef struct Node { int data; st...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

男人私处,哪些需要整形linyinanke.cn

这是新建文章1.html,请修改添加正文内容。相关的主题文章: 睡觉打呼噜跟性能力有关LINYINANKE.CN

九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题

九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题 引言     自发表上一篇文章至今(事实上,上篇文章更新了近3个月之久),blog已经停了3个多月,而在那之...

程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦

程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大经典原创系列集锦与总结 (七月算法在线学院:http://www.julyedu.com/,面试&算法&机器学习在线课程) ...

单链表逆序-------- 递归和循环

1、 单链表逆序          经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储...

递归实现链表的正序和倒序输出

void display(Link p)//正序 { if(p==NULL) { return; } printf("%d\n", p->d...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)