反正打印链表

开始看这个题目的时候,还真觉得他娘的高大上啊。

其实呢,都是些噱头!!!!!

两种方法:

    1、用栈实现
    2、既然能想到栈,那么递归也能想到吧

比较两种方法:


     比较这两种方法而言,其实用栈的方法好些,对于递归这种方法,如果链表过长,(我们知道,对于子函数的调用,是通过不断地在主函数体后面的空间
中组织新的栈空间),因此可能会导致栈的溢出。

用栈实现

  1. #ifndef LIST_INSERTREMOVEPRINT_H
  2. #define LIST_INSERTREMOVEPRINT_H
  3. #include<iostream>
  4. #include<stack>
  5. struct ListNode{
  6. int val;
  7. struct ListNode *nxt;
  8. };
  9. void addListNode(struct ListNode**list,int value){
  10. struct ListNode *nodeInsert=(struct ListNode*)(malloc(sizeof(struct ListNode)));
  11. nodeInsert->val=value;
  12. nodeInsert->nxt=NULL;
  13. if(*list==NULL){
  14. *list=nodeInsert;
  15. return ;
  16. }
  17. struct ListNode *iter=*list;
  18. while(iter->nxt!=NULL){
  19. iter=iter->nxt;
  20. }
  21. iter->nxt=nodeInsert;
  22. }
  23. void removeListNode(struct ListNode**head,int value){
  24. if(*head==NULL||head==NULL){
  25. return ;
  26. }
  27. struct ListNode *deleteNode=NULL;
  28. if((*head)->val==value){
  29. deleteNode=*head;
  30. (*head)=(*head)->nxt;
  31. delete deleteNode;
  32. return;
  33. }
  34. struct ListNode *pnode=*head;
  35. while(pnode!=NULL){
  36. pnode=pnode->nxt;
  37. if(pnode->val==value){
  38. deleteNode=pnode;
  39. pnode=pnode->nxt;
  40. delete deleteNode;
  41. return ;
  42. }
  43. }
  44. }
  45. void invertPrint(struct ListNode**head){
  46. if(head==NULL||*head==NULL){
  47. return;
  48. }else{
  49. struct ListNode *iter=*head;
  50. std::stack<int> listStack;
  51. while(iter!=NULL){
  52. listStack.push(iter->val);
  53. iter=iter->nxt;
  54. }
  55. while(!listStack.empty()){
  56. std::cout<<listStack.top();
  57. listStack.pop();
  58. }
  59. return ;
  60. }
  61. }
  62. #endif
  1. int main(){
  2. struct ListNode *list=NULL;
  3. addListNode(&list,2);
  4. addListNode(&list,3);
  5. addListNode(&list,4);
  6. invertPrint(&list);
  7. }

用递归实现:

  1. void invertPrint_recursive(struct ListNode*head){
  2. if(head==NULL){
  3. return ;
  4. }else{
  5. if(head->nxt!=NULL){
  6. invertPrint_recursive(head->nxt);
  7. }
  8. std::cout<<head->val<<std::endl;
  9. }




posted @ 2015-07-17 19:31  yml435  阅读(169)  评论(0编辑  收藏  举报