• 反正打印链表


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

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

    两种方法:

        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. }




  • 相关阅读:
    模拟--北京标准时间
    DOM方法
    Document-对象属性和常用的对象方法
    struts2标签
    OGNL
    Java基础方面
    初识拦截器
    访问者模式
    备忘录模式
    门面模式
  • 原文地址:https://www.cnblogs.com/yml435/p/4655495.html
Copyright © 2020-2023  润新知