链表从尾到头输出及其扩展
2011-08-31 16:19
106 查看
题目:输入一个链表(无环单链表)的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:
方法有多种:
方法1. 链表逆序,然后遍历输出,改变了链表指针,而且操作麻烦.
方法2. 利用栈先进后出的特性, 需要销号额外空间,增加出栈入栈代码.
方法3. 原理同方法2, 用递归的方法. 操作简便.
typedef struct listNode { struct listNode* next; int data; }Node;
方法有多种:
方法1. 链表逆序,然后遍历输出,改变了链表指针,而且操作麻烦.
方法2. 利用栈先进后出的特性, 需要销号额外空间,增加出栈入栈代码.
方法3. 原理同方法2, 用递归的方法. 操作简便.
/* 方法1: 先链表逆序,再遍历输出 */ Node* reverseList(Node* head) { Node* pReversedHead = NULL; Node* cursor = head; while(cursor != NULL) { Node* next = cursor->next; if(NULL == pReversedHead){ cursor ->next = NULL; }else { cursor->next = pReversedHead; } pReversedHead = cursor; cursor = next; } cursor = pReversedHead; while(p!=NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); return pReversedHead; } /* 方法2: 利用栈实现 */ void reverseOutput2(Node* head) { Node* cursor = head; while(p!=NULL) { stack_push(p->data); p = p->next; } while( !stack_is_empty() ) { int tmp = stack_pop(); printf("%d ", tmp); } printf("\n"); } /* 方法3: 递归调用 */ void reverseOutput2(Node* head) { if(NULL != head) { reverseOutput(head->next); printf("%d ", head->data); } }
相关文章推荐
- 判断链表中是否存在环问题、判断两个链表是否相交问题及其扩展
- 单链表判断是否含有环及其扩展问题
- 判断链表有环及其扩展问题
- 数据结构 二叉树 索引链表 及其索引话 输出
- 什么是BNF EBNF 巴科斯范式及其扩展 BNF & Augmented BNF
- 链表的指定位置输出
- 双循环链表的构建,插入,删除,输出
- 一道面试题及其扩展,求好解法
- 双向链表及其用法
- 输入一个链表,反转链表后,输出链表的所有元素。
- 单链表及其应用
- linux 中逻辑卷的扩展和缩减及其快照卷的保存
- VC中用到的几种调试输出TRACE的方法及其区别
- 隐马尔科夫模型(HMM)及其扩展
- 逆序输出链表
- 输出链表时倒数第K个结点
- 单链表_生成100个随机数_查询并输出大于K的数
- 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。C++
- 13、输入一个单向链表,输出该链表中倒数第k个结点
- 面试题:输入一个链表,输出该链表中倒数第k个结点。