将一个单向链表逆序
2012-09-20 13:12
176 查看
/* *about: 腾讯面试,将一个单向链表逆序 *author:justinzhang *email:uestczhangchao@gmail.com *estblished:2011年4月24日16:40:25 *revised:2011年5月10日15:00:26 */ #include <iostream> using namespace std; class node { public: node * next; int data; }; node *test = NULL; node *nodereverse(node *head) { //如果一个函数的输入参数有指针,一定要记住判断指针时候为空 //1>:在使用一个指针之前一定要判断它是否为空; //2>:使用完后要释放由指针指向的存储单元 //3>:释放完存储单元后要将指针赋值为NULL; if(head->next==NULL || head==NULL) return head; node* temp1=head; node* temp2=NULL; node* temp3=head->next; temp1->next = NULL; //要注意这里面的顺序,先将temp3保存在temp2中, //然后再将temp3移动到下一个元素,然后才能改动temp2 // while(temp3->next!=NULL) { temp2 = temp3; temp3 = temp3->next; temp2->next = temp1;//不能再temp3= temp3->next;之前执行 temp1 = temp2; } temp3->next = temp2; return temp3; } void initnode() { node * tmp = NULL; for(int i=0; i<4; i++) { tmp = new node; tmp->data = i; tmp->next = test; test = tmp; } } void display(node *nn) { if(nn==NULL) { cout << "no data to display\n"; return ; } node *dis = nn; while(dis!=NULL) { cout << dis->data << endl; dis = dis->next; } } //释放动态申请的空间 void distroy(node *nn) { if (nn==NULL) { return ; } while (nn!=NULL) { node *tmp = nn; nn = nn->next; delete tmp; } } int main() { initnode(); display(test); cout << "**************" << endl; node *tmp = nodereverse(test); if(test==NULL) exit(0); display(tmp); //tmp和test指向的存储空间已经使用完毕,应该释放掉他们申请的空间! //并且,要将他们赋值为NULL,否则他们将成为野指针!!!!,一定要注意了~~ distroy(tmp);//释放动态申请的内存 tmp = NULL;//将他们重新赋值为NULL,不然就会成为野指针~~~~~ test = NULL; cout << "tmp= " << tmp << endl; //如果上面没有tmp = NULL;test = NULL;,display将会出错, //因为在display开始的时候判断传入的参数是否为NULL,如果不把野指针赋值为NULL, //那么判断就没有效果,会继续指向display中的while语句,而此时指针所指向的存储空间已经被释放掉了, //这样就会出现异常. display(test); system("pause"); return 0; }
相关文章推荐
- 将一个单向链表逆序
- 将一个单向链表逆序
- 已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)
- 向升序单向链表中插入一个节点
- 输入一个单向链表,输出该链表中倒数第k个结点
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头。
- 将一个链表逆序并输出
- 单向链表逆序
- 微软面试题:反序一个单向链表
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- 今天开始学Java 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。
- 今天开始学Java 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
- 一个简单的"单向链表"
- 两个单向链表,存在同一个元素,求其交点
- 最简洁的单向链表逆序
- 输入一个单向链表,输出该链表中倒数第 k 个结点。链表的倒数第0 个结点为链表的尾指针。
- 判断一个单向链表中是否存在环
- alg : 单向链表逆序 on drv
- 一个单向链表的实现
- 微软100题13题(输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针)