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

原创 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;
	}
}

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

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

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

C++ 递归和非递归实现链表逆序

测试环境:vs2010  windows7 逆序分别采用递归调用和链表头插法实现逆序。 具体代码如下: #include #include using namespace std; class...
  • huangshanchun
  • huangshanchun
  • 2015年07月14日 19:40
  • 1091

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

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

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

结点定义: struct Node { int data; Node *next; }; 方法一: 设置两个临时指针pre和ne分别标记当前指针的前驱和后...
  • laomahao
  • laomahao
  • 2012年03月25日 13:54
  • 5637

链表的逆序输出 递归算法

// 1233.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #inc...
  • jianghuihong2012
  • jianghuihong2012
  • 2013年10月24日 21:24
  • 993

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

结点定义: [cpp] view plaincopy struct Node  {          int data;          Node *next;  };   方法一: ...
  • eastlhu
  • eastlhu
  • 2014年04月21日 17:21
  • 530

递归逆序打印单链表(c实现)

递归逆序打印单链表。交换打印语句和递归调用的顺序,可以实现顺序打印和逆序打印链表。 #include #include typedef struct Node { int data; str...
  • u010049696
  • u010049696
  • 2015年01月05日 22:55
  • 1337

单链表逆序

2、 单链表逆序          第二个题目是很经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了...
  • autumn20080101
  • autumn20080101
  • 2012年05月27日 19:20
  • 47136

单链表的合并(递归-非递归)以及将单链表逆序

  • 2014年05月09日 19:50
  • 14KB
  • 下载

逆序输出单链表的值——深深地被递归折服

要求逆序输出单链表的值,例如: 1.null 不打印 2. 1->2->3->5->null ,打印结果为 5 4 3 2 1 哈哈,遇到这个题目时,我的第一想法就是,这...
  • FFFLLLLLL
  • FFFLLLLLL
  • 2016年06月16日 17:15
  • 1044
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单链表逆序(递归&非递归)
举报原因:
原因补充:

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