fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct node
  5. {
  6. int data;
  7. struct node *next;
  8. };
  9.  
  10. typedef struct node NODE;
  11.  
  12. /* 创建单链表 */
  13. NODE *creatqlist()
  14. {
  15. NODE *head, *p, *s;
  16. int num;
  17.  
  18. head = (NODE *)malloc(sizeof(NODE));
  19. p = head;
  20.  
  21. /* 输入数据:1 2 3 4 5 6 0 */
  22. num = 1;
  23.  
  24. while (num != 0)
  25. {
  26. s = (NODE *)malloc(sizeof(NODE));
  27.  
  28. s->data = num;
  29. p->next = s;
  30. p = s;
  31.  
  32. if (num == 1)
  33. num = 2;
  34. else if (num == 2)
  35. num = 3;
  36. else if (num == 3)
  37. num = 4;
  38. else if (num == 4)
  39. num = 5;
  40. else if (num == 5)
  41. num = 6;
  42. else if (num == 6)
  43. num = 0;
  44. }
  45.  
  46. p->next = NULL;
  47.  
  48. return head;
  49. }
  50.  
  51. /* 删除第i个结点 */
  52. void deleteNode(NODE *head, int i)
  53. {
  54. NODE *p, *s;
  55. int j = 0;
  56.  
  57. p = head;
  58.  
  59. /* 找到第i个结点的前一个结点 */
  60. while (p->next != NULL && j < i - 1)
  61. {
  62. p = p->next;
  63. j++;
  64. }
  65.  
  66. if (p->next == NULL || j != i - 1)
  67. {
  68. printf("the delete position is illegal\n");
  69. }
  70. else
  71. {
  72. s = p->next;
  73. p->next = s->next;
  74. free(s);
  75. }
  76. }
  77.  
  78. int main()
  79. {
  80. NODE *q, *HEAD;
  81.  
  82. /* 建立链表 */
  83. HEAD = creatqlist();
  84.  
  85. /* 输出删除前的数据 */
  86. q = HEAD->next;
  87.  
  88. printf("the input number are:\n");
  89.  
  90. while (q != NULL)
  91. {
  92. printf("%d\t", q->data);
  93. q = q->next;
  94. }
  95.  
  96. printf("\n");
  97.  
  98. /* 删除第3个元素 */
  99. deleteNode(HEAD, 3);
  100.  
  101. /* 输出删除后的数据 */
  102. q = HEAD->next;
  103.  
  104. printf("the input number after delete are:\n");
  105.  
  106. while (q != NULL)
  107. {
  108. printf("%d\t", q->data);
  109. q = q->next;
  110. }
  111.  
  112. printf("\n");
  113.  
  114. return 0;
  115. }
Success #stdin #stdout 0.01s 5312KB
stdin
Standard input is empty
stdout
the input number are:
1	2	3	4	5	6	
the input number after delete are:
1	2	4	5	6