• N-FX3-4 删除链表节点


    链表:删除链表中的第X个节点。

    结构的定义

    struct node
    {  int num;
      struct node *next;
    }
    函数的原型:struct node *insertnode( struct node *head,int x,int num ), 其中:参数head 是单向链表的头指针;参数x 表示在第x个数据节点之后插入新节点,num是新插入节点的数据成员的值。函数的返回值是单向链表的头指针。
    例如当原链表存储的数据为:1,2,3,4,5,6,7,x=3时,原链表如下图所示

     

    删除第x=3个数据节点之后得到的结果如下图所示:

     

    输入:链表的数据(以0表示终止),x的值

    输出:新链表的数据

    例如

    输入:

    1

    2

    3

    4

    5

    0

    3

    输出:

    1

    2

    4

    5

    提示:当x的值超过原始链表的串长,则不用删除节点,输出:X is too large!

    如果需要在deletenode函数中终止程序,请使用语句:exit (0);

    预设代码

    前置代码

    view plainprint?

    1. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
    2.   
    3. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
    4. #include "stdio.h"  
    5. #include "stdlib.h"  
    6.   
    7. struct node  
    8. {  
    9.     int data;  
    10.     struct node * next;  
    11. };  
    12.   
    13. typedef struct node NODE;  
    14. typedef struct node * PNODE;  
    15.   
    16. void outlist( PNODE );  
    17. void deletenode(NODE *head, int num);  
    18.   
    19. int main ( )  
    20. {  
    21.     int num=1;  
    22.     PNODE head, p, newnode;  
    23.     int index = -1, value = 0;  
    24.   
    25.     head = (PNODE)malloc( sizeof(NODE) );  
    26.     head->next = NULL;  
    27.     head->data = -1;  
    28.   
    29.     p= head;  
    30.     while ( num!=0 )  
    31.     {  
    32.         scanf("%d", &num);  
    33.         if ( num!=0 )  
    34.         {  
    35.             newnode = (PNODE)malloc( sizeof(NODE) );  
    36.             newnode->next= NULL;  
    37.             newnode->data  = num;  
    38.   
    39.             p->next = newnode;  
    40.             p = p->next;  
    41.         }  
    42.     }  
    43.   
    44.     scanf("%d", &value);  
    45.   
    46.     deletenode(head, value);  
    47.     outlist(head);  
    48.     system("pause");  
    49.     return 0;  
    50. }  
    51.   
    52. void outlist( PNODE head )  
    53. {   PNODE p;  
    54.     p = head->next;  
    55.     while ( p != NULL )  
    56.     {   printf("%d\n", p->data);  
    57.         p = p->next;  
    58.     }  
    59. }  
    60.   
    61. /* This is an example for list. Please programme your code like it. 
    62. void deletenode(NODE *head, int num) 
    63.     ...... 
    64. /* PRESET CODE END - NEVER TOUCH CODE ABOVE */  
      1. #include "stdio.h"
      2. #include "stdlib.h"
      3. struct node
      4. {
      5. int data;
      6. struct node * next;
      7. };
      8. typedef struct node NODE;
      9. typedef struct node * PNODE;
      10. void outlist( PNODE );
      11. void deletenode(NODE *head, int num);
      12. int main ( )
      13. {
      14. int num=1;
      15. PNODE head, p, newnode;
      16. int index = -1, value = 0;
      17. head = (PNODE)malloc( sizeof(NODE) );
      18. head->next = NULL;
      19. head->data = -1;
      20. p= head;
      21. while ( num!=0 )
      22. {
      23. scanf("%d", &num);
      24. if ( num!=0 )
      25. {
      26. newnode = (PNODE)malloc( sizeof(NODE) );
      27. newnode->next= NULL;
      28. newnode->data = num;
      29. p->next = newnode;
      30. p = p->next;
      31. }
      32. }
      33. scanf("%d", &value);
      34. deletenode(head, value);
      35. outlist(head);
      36. system("pause");
      37. return 0;
      38. }
      39. void outlist( PNODE head )
      40. { PNODE p;
      41. p = head->next;
      42. while ( p != NULL )
      43. { printf("%d\n", p->data);
      44. p = p->next;
      45. }
      46. }
      47. void deletenode(NODE *head, int num)
      48. {
      49. NODE*p=head;
      50. for(int i=0;i<num-1;i++){
      51. if((p->next)==NULL){
      52. printf("X is too large!\n");
      53. exit(0);
      54. }
      55. p=p->next;
      56. }
      57. NODE* q=p->next;
      58. if(q==NULL){
      59. printf("X is too large!\n");
      60. exit(0);//TODO
      61. }
      62. p->next=q->next;
      63. free(q);
      64. }

  • 相关阅读:
    【树莓派不吃灰】搭建sqlite3数据库环境
    西南科技大学模拟电子技术实验三(BJT单管共射放大电路测试)预习报告
    基于单片机雨天自动关窗器的设计
    在断更的日子里,我想了很多... ...
    uniapp 事件委托失败 获取不到dataset
    9 Spring MVC 数据校验
    成功上岸,刚转行自学Python的小姑娘,每个月入1W+......
    学生成绩管理系统(C语言有结构体实现)
    零基础产品经理如何迅速学习Axure原型制作?快速上手攻略!
    这几个小技巧,收藏起来总没错
  • 原文地址:https://blog.csdn.net/bitucas/article/details/125542636