当前位置:   article > 正文

707. 设计链表(力扣刷题)(C语言题解)

707. 设计链表(力扣刷题)(C语言题解)

个人博客主页:https://blog.csdn.net/2301_79293429?type=blog
专栏:https://blog.csdn.net/2301_79293429/category_12545690.html

题目链接:

707. 设计链表 - 力扣(LeetCode)

该题为中等题,包括了对链表的大部分常用操作,更改真的很烦,因为它很长,链表题目也不方便调试,不知道哪里有问题,你只有一点一点的对比代码才找得到错哪

AC代码:

  1. /*一定要建立虚拟头节点,方便的多--->统一操作,避免每次都要将头节点单独讨论*/
  2. typedef int VALTYPE;/*方便更改数据类型*/
  3. /*链表的基本创建*/
  4. typedef struct MyLinkedList {
  5. VALTYPE val;
  6. struct MyLinkedList* next;
  7. }MyLinkedList;
  8. MyLinkedList* myLinkedListCreate()
  9. {
  10. MyLinkedList* head=(MyLinkedList*)malloc(sizeof(MyLinkedList));
  11. head->val=0;
  12. head->next=NULL;
  13. return head;
  14. }
  15. int myLinkedListGet(MyLinkedList* obj, int index)
  16. {
  17. /*这里的obj是我们创建的虚拟头节点,所以要令p=obj->next*/
  18. MyLinkedList* p=obj->next;
  19. /*只是创建了一个指针变量,不需要动态开辟一块空间*/
  20. int i;
  21. for(i=0;p!=NULL;i++)
  22. {
  23. if(i==index)
  24. return p->val;
  25. if(p->next==NULL)
  26. return -1;
  27. p=p->next;
  28. }
  29. return -1;
  30. }
  31. void myLinkedListAddAtHead(MyLinkedList* obj, int val)
  32. {
  33. MyLinkedList* p1=(MyLinkedList*)malloc(sizeof(MyLinkedList));
  34. /*创建了一个结构体,需要动态开辟一块空间*/
  35. p1->val=val;
  36. p1->next=obj->next;
  37. /*注意顺序,要先将新节点的next指向obj的next,再更新obj的next*/
  38. obj->next=p1;
  39. }
  40. void myLinkedListAddAtTail(MyLinkedList* obj, int val)
  41. {
  42. /*正确写法*/
  43. MyLinkedList* p=obj;/*不是obj->next了,因为也要对头节点进行判断是否为null*/
  44. for(int i=0;p->next!=NULL;i++)
  45. { /**/
  46. p=p->next;
  47. }
  48. MyLinkedList* p1=(MyLinkedList*)malloc(sizeof(MyLinkedList));
  49. p1->next=NULL;
  50. p1->val=val;
  51. p->next=p1;
  52. }
  53. void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val)
  54. {
  55. if (index == 0) /**/
  56. {
  57. myLinkedListAddAtHead(obj, val);
  58. return;
  59. }
  60. MyLinkedList* p=obj->next;
  61. for(int i=1;p!=NULL;i++)
  62. {/*要从1开始,0要特殊处理*/
  63. if(i==index)
  64. {/*要等于index*/
  65. MyLinkedList* p2=(MyLinkedList*)malloc(sizeof(MyLinkedList));
  66. p2->val=val;
  67. p2->next=p->next;
  68. p->next=p2;
  69. return;/*直接return*/
  70. }
  71. p=p->next;
  72. }
  73. void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index)
  74. {
  75. MyLinkedList* p=obj;
  76. for(int i=-1;p!=NULL&&p->next!=NULL;i++)
  77. {
  78. if(i==index-1)
  79. {
  80. MyLinkedList* temp=p->next;
  81. p->next=p->next->next;
  82. free(temp);
  83. break;
  84. }
  85. p=p->next;
  86. }
  87. }
  88. void myLinkedListFree(MyLinkedList* obj)
  89. {
  90. struct MyLinkedList*p=obj->next;
  91. for(int i=0;p!=NULL;i++)
  92. {
  93. struct MyLinkedList*temp=p;
  94. p=p->next;
  95. free(temp);
  96. }
  97. }
  98. /**
  99. * Your MyLinkedList struct will be instantiated and called as such:
  100. * MyLinkedList* obj = myLinkedListCreate();
  101. * int param_1 = myLinkedListGet(obj, index);
  102. * myLinkedListAddAtHead(obj, val);
  103. * myLinkedListAddAtTail(obj, val);
  104. * myLinkedListAddAtIndex(obj, index, val);
  105. * myLinkedListDeleteAtIndex(obj, index);
  106. * myLinkedListFree(obj);
  107. */

最后祝大家题题AC,只盼做个WA梦 ~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52736
推荐阅读
相关标签
  

闽ICP备14008679号