鱼C论坛

 找回密码
 立即注册
查看: 3197|回复: 1

[已解决]求助求助!!!用c语言实现

[复制链接]
发表于 2021-4-14 14:27:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 看清之后才看轻 于 2021-4-14 15:15 编辑

输入若干的正整数(输入-1时结束) ,建立一个单向链表;再输入一正整数m,删除链表中值为m的所有节点。(用c实现)
最佳答案
2021-4-14 17:24:46
本帖最后由 henkuderen 于 2021-4-14 17:26 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct ListNode
  4. {
  5. int data;
  6. struct ListNode *next;
  7. };

  8. struct ListNode *readlist();
  9. struct ListNode *delete_val( struct ListNode *L, int m );
  10. void printlist( struct ListNode *L )
  11. {
  12.     struct ListNode *p = L;
  13.     while (p)
  14.     {
  15.         printf("%d ", p->data);
  16.         p = p->next;
  17.     }
  18.     printf("\n");
  19. }

  20. int main()
  21. {
  22.     int val;
  23.     printf("连续输入多个整数(-1表示结束):");
  24.     struct ListNode *L = readlist();
  25.     printf("\n链表的数据: ");
  26.     printlist(L);
  27.     printf("输入要删除的整数:");
  28.     scanf("%d", &val);
  29.     L = delete_val(L, val);
  30.     printlist(L);
  31.     return 0;
  32. }

  33. struct ListNode *readlist()
  34. {
  35.     struct ListNode *head,*p1,*p2;
  36.     int num;
  37.     int size = sizeof(struct ListNode);
  38.     head = NULL;
  39.     while(1)
  40.     {
  41.         scanf("%d", &num);
  42.         if(num == -1) //-1跳出
  43.         {
  44.             break;
  45.         }
  46.         p1 = (struct ListNode*)malloc(size);
  47.         p1->data = num;
  48.         p1->next = NULL;
  49.         if(head == NULL)
  50.         {
  51.            head = p1;
  52.         }
  53.         else
  54.         {
  55.            p2->next = p1;
  56.         }
  57.         p2 = p1;
  58.     }
  59.     return head;
  60. }

  61. struct ListNode *delete_val( struct ListNode *L, int val )
  62. {
  63.     struct ListNode *ptr, *ptr1;

  64.     while( L != NULL && ( L->data == val) )
  65.     {
  66.         ptr1 = L;
  67.         L = L->next;
  68.         free(ptr1);
  69.     }
  70.     if( L == NULL )
  71.         return NULL;
  72.     ptr = L;
  73.     ptr1 = L->next;
  74.     while( ptr1 != NULL)
  75.     {
  76.         if( ptr1->data == val )
  77.         {
  78.             ptr->next = ptr1->next;
  79.             free(ptr1);
  80.         }
  81.         else
  82.             ptr = ptr1;
  83.         ptr1 = ptr->next;
  84.     }
  85.     return L;
  86. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-14 17:24:46 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +5 鱼币

本帖最后由 henkuderen 于 2021-4-14 17:26 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct ListNode
  4. {
  5. int data;
  6. struct ListNode *next;
  7. };

  8. struct ListNode *readlist();
  9. struct ListNode *delete_val( struct ListNode *L, int m );
  10. void printlist( struct ListNode *L )
  11. {
  12.     struct ListNode *p = L;
  13.     while (p)
  14.     {
  15.         printf("%d ", p->data);
  16.         p = p->next;
  17.     }
  18.     printf("\n");
  19. }

  20. int main()
  21. {
  22.     int val;
  23.     printf("连续输入多个整数(-1表示结束):");
  24.     struct ListNode *L = readlist();
  25.     printf("\n链表的数据: ");
  26.     printlist(L);
  27.     printf("输入要删除的整数:");
  28.     scanf("%d", &val);
  29.     L = delete_val(L, val);
  30.     printlist(L);
  31.     return 0;
  32. }

  33. struct ListNode *readlist()
  34. {
  35.     struct ListNode *head,*p1,*p2;
  36.     int num;
  37.     int size = sizeof(struct ListNode);
  38.     head = NULL;
  39.     while(1)
  40.     {
  41.         scanf("%d", &num);
  42.         if(num == -1) //-1跳出
  43.         {
  44.             break;
  45.         }
  46.         p1 = (struct ListNode*)malloc(size);
  47.         p1->data = num;
  48.         p1->next = NULL;
  49.         if(head == NULL)
  50.         {
  51.            head = p1;
  52.         }
  53.         else
  54.         {
  55.            p2->next = p1;
  56.         }
  57.         p2 = p1;
  58.     }
  59.     return head;
  60. }

  61. struct ListNode *delete_val( struct ListNode *L, int val )
  62. {
  63.     struct ListNode *ptr, *ptr1;

  64.     while( L != NULL && ( L->data == val) )
  65.     {
  66.         ptr1 = L;
  67.         L = L->next;
  68.         free(ptr1);
  69.     }
  70.     if( L == NULL )
  71.         return NULL;
  72.     ptr = L;
  73.     ptr1 = L->next;
  74.     while( ptr1 != NULL)
  75.     {
  76.         if( ptr1->data == val )
  77.         {
  78.             ptr->next = ptr1->next;
  79.             free(ptr1);
  80.         }
  81.         else
  82.             ptr = ptr1;
  83.         ptr1 = ptr->next;
  84.     }
  85.     return L;
  86. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 09:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表