数据结构与算法-----单向线性链表(逆转和反向打印)
2015-12-01 17:05
260 查看
单向链表没有前指针,所以实现反向打印还是比较麻烦,我们这里使用递归原理解决此问题。
这里提到逆转,也就是将单链表的next指针指向前一个节点,我们也使用递归实现。
这里提到逆转,也就是将单链表的next指针指向前一个节点,我们也使用递归实现。
// 练习:实现单向线性链表的建立、测长、正向打印和 // 反向打印 // 逆转 #include <iostream> using namespace std; class List { public: // 构造函数中初始化为空链表 List (void) : m_head (NULL), m_tail (NULL) {} // 析构函数中销毁剩余的节点 ~List (void) { for (Node* next; m_head; m_head = next) { next = m_head -> m_next; delete m_head; } } // 追加 void append (int data) { Node* node = new Node (data); if (m_tail) m_tail -> m_next = node; else m_head = node; m_tail = node; } // 测长 size_t length (void) const { size_t len = 0; for (Node* node = m_head; node; node = node -> m_next) len++; return len; } // 正向打印 void print (void) const { for (Node* node = m_head; node; node = node -> m_next) cout << node -> m_data << ' '; cout << endl; } // 反向打印 void rprint (void) const { rprint (m_head); cout << endl; } //逆转 void reverse(void){ reverse(m_head); swap(m_head,m_tail); } private: // 节点 class Node { public: Node (int data = 0, Node* next = NULL) : m_data (data), m_next (next) {} int m_data; // 数据 Node* m_next; // 后指针 }; // 反向打印以head为首的子链表 void rprint (Node* head) const { if (head) {//使用递归(也即堆栈方式)实现逆向打印链表 rprint (head -> m_next); cout << head -> m_data << ' '; }//如果head为空,函数会一层一层的返回 } void reverse(Node *head){ if(head && head->m_next){ reverse(head->m_next); head->m_next->m_next=head; head->m_next=NULL; } } Node* m_head; // 头指针 Node* m_tail; // 尾指针 }; int main (void) { List list; for (int i = 1; i <= 20; i++) list.append (i); cout << list.length () << endl; list.print (); list.rprint (); list.reverse (); list.print (); return 0; }
相关文章推荐
- 数据结构与算法-----堆栈-使用链表(链式结构)实现
- 网络设备驱动程序数据结构
- Linux USB驱动数据结构
- [数据结构]合并有序数组
- 数据结构实践—— 英文单词的基数排序
- 数据结构---线段树
- 数据结构实践——归并排序算法的改进
- 数据结构C++语言描述专题系列 (二) 栈
- 数据结构C++语言描述专题系列 (一) 绪论
- 【高级数据结构】[SPOJ QTREE]树链剖分/动态树各一模板
- 7.数据结构之哈希表
- 数据结构实践——大数据集上排序算法性能的体验
- [数据结构]折半搜索、归并排序( 分治思想)
- EKAlgorithms-常用数据结构Objective-C语言实现一数组排序
- 《大话数据结构》之二叉树的四种遍历
- 浅谈算法和数据结构: 九 平衡查找树之红黑树
- [数据结构]队列的基本操作
- 【数据结构】建立和平衡AVL二叉树
- JavaScript数据结构 --- 散列
- 数据结构之栈