N-FX3-4 删除链表节点

这篇博客主要讲解如何在C语言中实现单向链表的插入和删除操作。提供了`insertnode`函数用于在链表的第x个节点后插入新节点,`deletenode`函数则用于删除第x个节点。博客通过示例展示了操作前后的链表状态,并给出了删除操作的实现代码,包括边界条件检查。
摘要由CSDN通过智能技术生成

链表:删除链表中的第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 */  
    #include "stdio.h"  
    #include "stdlib.h"  
    
    struct node  
    {  
    	int data;  
    	struct node * next;  
    };  
    
    typedef struct node NODE;  
    typedef struct node * PNODE;  
    
    void outlist( PNODE );  
    void deletenode(NODE *head, int num);  
    
    int main ( )  
    {  
    	int num=1;  
    	PNODE head, p, newnode;  
    	int index = -1, value = 0;  
    	
    	head = (PNODE)malloc( sizeof(NODE) );  
    	head->next = NULL;  
    	head->data = -1;  
    	
    	p= head;  
    	while ( num!=0 )  
    	{  
    		scanf("%d", &num);  
    		if ( num!=0 )  
    		{  
    			newnode = (PNODE)malloc( sizeof(NODE) );  
    			newnode->next= NULL;  
    			newnode->data  = num;  
    			
    			p->next = newnode;  
    			p = p->next;  
    		}  
    	}  
    	
    	scanf("%d", &value);  
    	
    	deletenode(head, value);  
    	outlist(head);  
    	system("pause");  
    	return 0;  
    }  
    
    void outlist( PNODE head )  
    {   PNODE p;  
    	p = head->next;  
    	while ( p != NULL )  
    	{   printf("%d\n", p->data);  
    		p = p->next;  
    	}  
    }  
    
    void deletenode(NODE *head, int num) 
    { 
        NODE*p=head;
    	
    	for(int i=0;i<num-1;i++){
    		if((p->next)==NULL){
    			printf("X is too large!\n");
    			exit(0);
    		}
    		p=p->next;
    	}
    	NODE* q=p->next;
    	if(q==NULL){
    		printf("X is too large!\n");
    		exit(0);//TODO
    	}
    	p->next=q->next;
    	free(q);
    } 
     

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值