单链表的倒置
代码:
#include <iostream> using namespace std;
enum Error { underflow,overflow,success };
template <class Node_entry > struct Node { Node_entry entry; Node<Node_entry> * next; Node(); Node ( Node_entry item,Node<Node_entry> * add_on=0 ); };
template< class Node_entry> Node< Node_entry >::Node() { next = NULL; }
template< class Node_entry> Node<Node_entry>::Node(Node_entry item,Node<Node_entry> *add_on) { entry = item; next = add_on; } // 以上是建立了一个模板的节点类型
template<class Node_entry> Node<Node_entry> * Inverse (Node<Node_entry> * &first ) { // first 是传入链表的头指针 Node<Node_entry> * p = first,* q; if( first == NULL ) return first; else { p = p->next; first->next = NULL; // 把原来的头结点的next赋值为NULL } while( p ) { //通过循环向头指针后插入结点 。 q = p->next; p->next = first; first = p; p = q; } return first;} void main() { Node<int> * head = new Node<int> (1,NULL); Node<int> * p1 = new Node<int> (2,head); Node<int> * p2 = new Node<int> (3,p1); Node<int> * p3 = new Node<int> (4,p2); cout<<p3->entry<<endl; // 结果为 4, 这里 p3 为头指针 Node<int> * temp = Inverse( p3 ); cout<<p3->entry<<endl; // p3 现在也是头指针,不过由于已经倒置,所以 输出为 1 }
小经验:p->next 在左值位置 := 把一个节点链接到另一个节点尾;p->next 在右值 := 把p下一个节点的指针赋值给另一个指针 (编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|