单链表的倒置

 今天晚上作老师布置的作业,一道是单链表的倒置,可把我搞惨了..,这里也把我可悲的经历与大家说一下,提个醒免得以后犯和我一样的很傻的错误:

老师在PPT写好了函数接口,于是我就直接把它拷贝到vs 2005 express 中编写,写好了,ctrl + 7 进行编译,
“error C4335: 检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式”
“ warning C4067: 预处理器指令后有意外标记 - 应输入换行符”

“晕”,我百思不得其解,这到底是怎么回事? 于是我把代码拷到记事本里发现有好多莫名的黑色的小方块,哎,可能就是它惹的事吧,我重新把代码在记事本中排好,再放回编译器中,OK,顺利链接,哈哈,

代码如下:

#include
using namespace std;

enum Error { underflow, overflow, success };

template
struct Node {
 Node_entry entry;
 Node  * next;
 Node();
 Node ( Node_entry item, Node * add_on=0  );
};

template< class Node_entry>
Node< Node_entry >::Node() {
 next = NULL;
}

template< class Node_entry>
Node::Node(Node_entry item, Node *add_on) {
 entry = item;
 next = add_on;
}
// 以上是建立了一个模板的节点类型

template
Node *  Inverse (Node * &first ) { // first 是传入链表的头指针
 Node * 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 * head = new Node (1, NULL);
 Node * p1 = new Node (2, head); 
 Node * p2 = new Node (3, p1); 
 Node * p3 = new Node (4, p2);
 cout<entry< Node * temp = Inverse( p3 );
 cout<entry<}

 

最后和大家分享一下我的小经验,
p->next 在左值位置 := 把一个节点链接到另一个节点尾;
p->next 在右值 := 把p下一个节点的指针赋值给另一个指针

你可能感兴趣的:(C++,数据结构,算法)