单链表的倒置实现代码

前端之家收集整理的这篇文章主要介绍了单链表的倒置实现代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

单链表的倒置

代码

#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下一个节点的指针赋值给另一个指针

猜你在找的设计模式相关文章