从尾到头输出链表
来源:互联网 发布:js 将timestamp格式化 编辑:程序博客网 时间:2024/05/08 16:03
欢迎来论坛 http://jobexam.net
【题目】输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下
01
02
03
04
05
struct
ListNode
{
int
m_nKey;
ListNode* m_pNext;
};
【分析】分析:这是一道很有意思的面试题。该题以及它的变体经常出现在各大公司的面试、笔试题中。
这道题其实有2个思路。第一,就是首先将链表逆序。第二,就是将链表结点入栈,然后一个一个输出堆栈元素。第一个思路改变了链表的结构。属于质变算法;第二个需要一个堆栈结构,即需要额外的空间。各有优点和缺点。
第一个算法如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
void
print( Node * pHead );
{
if
(pHead == null)
{
printf
(
"no nodes"
);
return
;
}
Node *p = pHead->next;
while
(p != null)
{
printf
(
"%d"
, p->key);
}
return
;
}
void
invert_sequence(Node *pHead)
{
if
(pHead == null)
{
print(pHead);
return
;
}
Node *p = pHead->next;
if
(p == null)
{
print(pHead);
return
;
}
else
if
( p != null )
{
//将链表逆序
Node *q = p->next;
while
( q != null )
{
p->next = q->next;
pHead->next = q;
q->next = p;
q = p->next
}
//输出链表
print(pHead);
}
return
;
}
用堆栈的方法如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void
invert_sequence(Node *pHead)
{
if
(pHead == null)
{
printf
(
"no nodes"
);
return
;
}
Stack s;
init(s);
Node *p = pHead->next;
//压入堆栈s
while
(p != null)
{
push(s,p->data);
p = p->next;
}
//从堆栈中输出
while
(!isEmpty(s))
{
int
data = pop(s);
printf
(
"%d "
,data);
}
}
- 从尾到头输出链表--总结
- 从尾到头输出链表
- 从尾到头输出链表
- 031-从尾到头输出链表
- 从尾到头输出链表--归纳
- 从尾到头输出链表
- 从尾到头输出链表
- 从尾到头输出链表
- 从尾到头输出链表--总结
- 从尾到头输出链表
- 从尾到头输出链表
- 从尾到头输出链表
- 从尾到头输出链表
- 从尾到头输出链表
- 从尾到头输出链表
- 三种方式实现--从尾到头输出链表
- 链表从尾到头输出及其扩展
- 四种方式实现--从尾到头输出链表
- 节点流的简单示例
- PerfMon日志浏览工具
- jfreechart 散点图 ScatterChart 简单实例
- 设计模式与实例代码:Visitor模式
- 黑马韩前成Linux从入门到精通の第八章文本编辑器VI的使用
- 从尾到头输出链表
- 数据挖掘领域的十大挑战性问题
- 二叉树的深度
- Java_io_数组流
- Android使用TableLayou动态布局实例
- centos 虚拟主机配置
- Java 多应用服务器Session共享问题
- 冒泡排序、选择排序、插入排序 算法实现
- J2EE上API上两个init方法的区别