数据结构与算法-----单向线性链表(逆转和反向打印)
来源:互联网 发布:大数据精准营销时代 编辑:程序博客网 时间:2024/05/19 12:15
单向链表没有前指针,所以实现反向打印还是比较麻烦,我们这里使用递归原理解决此问题。
这里提到逆转,也就是将单链表的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;}
1 0
- 数据结构与算法-----单向线性链表(逆转和反向打印)
- 数据结构与算法(单向链表)
- 单向链表逆转
- 逆转单向链表
- 单向链表逆转
- 单向链表逆转
- 算法题-逆转线性表
- 线性链表逆转
- 单向链表逆转(递归)
- 数据结构----线性表----单向链表
- 单向链表的反向(算法的基础知识)
- 单向链表的创建和逆转(完整程序)
- 数据结构与算法-----双向线性链表
- 数据结构与算法(5)--线性表
- 数据结构与算法(二)线性表
- 数据结构与算法(线性表)
- 数据结构与算法(上)线性表
- 算法与数据结构-单向链表的直接插入排序和快速排序
- 使用苹果原生的JSON数据解析浅析
- 安装php5-mcrypt
- MSVC链接参数
- Linux下使用gdb进行单步调试(二)
- IIC设备驱动程序
- 数据结构与算法-----单向线性链表(逆转和反向打印)
- Android 4.1 设置Activity切换动画(XML)
- 四种jdbc链接方式
- 十大算法,让你轻松进阶高手
- JavaScript中读取和保存文件实例
- OC-4.NSString
- LCD设备驱动程序
- 桶、冒泡、快速排序
- EditText 边框颜色改变或设置为空