Llist.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #include <stdlib.h>
  2. typedef struct ListNode
  3. {
  4. int val;
  5. ListNode *next;
  6. } ListNode;
  7. // 若使用了带头节点的链表,则无需判断head是否为空
  8. ListNode *createListNode(int val)
  9. {
  10. ListNode *node = (ListNode *)malloc(sizeof(ListNode));
  11. node->val = val;
  12. node->next = NULL;
  13. return node;
  14. }
  15. void printList(ListNode *head)
  16. {
  17. ListNode *temp = head;
  18. while(temp){
  19. printf("%d ",temp->val);
  20. temp = temp->next;
  21. }
  22. printf("\n");
  23. }
  24. // 添加节点
  25. ListNode *addNode(ListNode *head,int val)
  26. {
  27. if(head == NULL){
  28. head = createListNode(val);
  29. return head;
  30. }
  31. ListNode *temp = head;
  32. while(temp->next){
  33. temp = temp->next;
  34. }
  35. ListNode *node = (ListNode *)malloc(sizeof(ListNode));
  36. node->val = val;
  37. node->next = NULL;
  38. temp->next = node;
  39. return head;
  40. }
  41. int Locate(ListNode *head,int val){
  42. if(head == NULL){
  43. return -1;
  44. }
  45. ListNode *temp = head;
  46. int index = 0;
  47. while(temp){
  48. if(temp->val==val){
  49. return index;
  50. }
  51. temp = temp->next;
  52. index++;
  53. }
  54. return -1;
  55. }
  56. // 删除节点
  57. ListNode *deleteNode(ListNode *head,int val){
  58. if(head == NULL){
  59. return NULL;
  60. }
  61. ListNode *temp1 = head;
  62. if(temp1->val == val){
  63. head = temp1->next;
  64. free(temp1);
  65. return head;
  66. }
  67. ListNode *temp2 = head->next;
  68. while (temp2)
  69. {
  70. if(temp2->val == val){
  71. temp1->next = temp2->next;
  72. free(temp2);
  73. return head;
  74. }
  75. temp1 = temp1->next;
  76. temp2 = temp2->next;
  77. }
  78. return head;
  79. }
  80. ListNode *insertNode(ListNode *head,int val,int index){
  81. if(head == NULL){
  82. head = createListNode(val);
  83. return head;
  84. }
  85. ListNode *temp = head;
  86. int i = 0;
  87. while(i < index-1 && temp){
  88. temp = temp->next;
  89. i++;
  90. }
  91. ListNode *node = (ListNode *)malloc(sizeof(ListNode));
  92. node->val = val;
  93. node->next = temp->next;
  94. temp->next = node;
  95. return head;
  96. }
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。