单链表的倒置

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

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

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

代码如下:

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值