• 【oj刷题记】【考研写法注意点】【1294】【多项式加法】【利用归并思想】【考研写法关于另外一个可能导致指针越界的问题】【以及遍历链表最保险的写法】


     一.注意点**

     

    一.本题的题解

    1. /*
    2. 系数:coefficient
    3. 指数: exponent
    4. */
    5. #include
    6. using namespace std;
    7. int n,m;
    8. struct Node
    9. {
    10. int expn; //指数
    11. int coef; //系数
    12. Node *next;
    13. Node(){}
    14. Node(int key1,int key2):expn(key1),coef(key2),next(NULL){}
    15. };
    16. void init(Node* &la,Node* &lb)
    17. {
    18. cin>>n>>m;
    19. //1.整理第一个多项式
    20. for(int i=1;i<=n;i++)
    21. {
    22. int expn,coef;
    23. cin>>expn>>coef;
    24. Node *now=new Node(expn,coef);
    25. /*
    26. 找到【la链表】中第一个大于等于【新输入的节点指数值】的
    27. 节点的 【前一个节点】。
    28. (要找的节点的前一个节点)
    29. */
    30. Node *p=la;
    31. while(p->next&&(p->next->expn)< now->expn)
    32. {
    33. p=p->next;
    34. }
    35. //现在p就是前一个节点,他的后一个节点有两种情况:1.等于now的指数,2.大于now的指数
    36. if(p->next!=NULL&&p->next->expn==now->expn) //指数相同就合并
    37. {
    38. p->next->coef+=now->coef;
    39. }
    40. else //指数不同就插入
    41. {
    42. now->next=p->next;
    43. p->next=now;
    44. }
    45. }
    46. //2.整理第二个多项式
    47. for(int i=1;i<=m;i++)
    48. {
    49. int expn,coef;
    50. cin>>expn>>coef;
    51. Node *now=new Node(expn,coef);
    52. Node *p=lb;
    53. while(p->next&&p->next->expn < now->expn) //找要找节点的前一个节点
    54. {
    55. p=p->next;
    56. }
    57. if(p->next!=NULL&&p->next->expn==now->expn) //指数相同就合并
    58. {
    59. p->next->coef+=now->coef;
    60. }
    61. else //指数不同就插入
    62. {
    63. now->next=p->next;
    64. p->next=now;
    65. }
    66. }
    67. }
    68. void merge(Node *la,Node *lb)
    69. {
    70. Node *pa=la->next;
    71. Node *pb=lb->next;
    72. while(pa&&pb)
    73. {
    74. if(pa->expn==pb->expn) //如果指数相同
    75. {
    76. if(pa->coef+pb->coef!=0)
    77. cout<expn<<" "<<(pa->coef+pb->coef)<//装入答案中
    78. pa=pa->next;
    79. pb=pb->next;
    80. }
    81. else if(pa->expnexpn) //如果pa的指数小于pb的指数
    82. {
    83. cout<expn<<" "<coef<//装入答案中
    84. pa=pa->next;
    85. }
    86. else if(pa->expn>pb->expn) //如果pa的指数大于pb的指数
    87. {
    88. cout<expn<<" "<coef<//装入答案中
    89. pb=pb->next;
    90. }
    91. }
    92. //扫尾
    93. while(pa)
    94. {
    95. cout<expn<<" "<coef<
    96. pa=pa->next;
    97. }
    98. while(pb)
    99. {
    100. cout<expn<<" "<coef<
    101. pb=pb->next;
    102. }
    103. }
    104. int main()
    105. {
    106. //la是第一个链表的开头 ,lb是第二个链表的开头
    107. Node *la=new Node(),*lb=new Node();
    108. la->next=NULL;
    109. lb->next=NULL;
    110. init(la,lb); //用两个链表分别整理两个多项式
    111. merge(la,lb); //实现两个多项式相加
    112. return 0;
    113. }

  • 相关阅读:
    探究 Meme 的金融与社交属性
    Mapper层注解讲解
    操作系统MIT6.S081:[xv6参考手册第4章]->Trap与系统调用
    自学系列之小游戏---贪吃蛇(vue3+ts+vite+element-plus+sass)(module.scss + tsx)
    面试:dumpsys meminfo 内存信息含义
    react antd 主题
    VScode安装与汉化
    C++11标准模板(STL)- 算法(std::transform)
    电力电子转战数字IC20220704day39——路科实验3c
    【python海洋专题四十三】海洋指数画法--单色渐变柱状图
  • 原文地址:https://blog.csdn.net/bei2002315/article/details/127957993