N-FX2-4 移动链表节点

给定带有表头结点的单向链表,编写一个函数,将链表中偶数序号的数据节点移到链尾。

链表节点的结构定义:

typedef struct numLink

{

int no;

struct numLink *next;

}NODE;

所编写函数的原型:void movenode( NODE *head)

其中:参数head 是单向链表的头指针。

 

输入:节点数目

输出:处理后的结果

说明:仅提交函数 void movenode( NODE *head) 即可。

预设代码

前置代码

view plainprint?

  1. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4.   
  5. typedef struct numLink  
  6. {  
  7.     int no;  
  8.     struct numLink *next;  
  9. }NODE;  
  10.   
  11. void movenode( NODE *head);  
  12.   
  13. void SetLink( NODE *h, int n )  
  14. {  
  15.     NODE *p=NULL, *q=NULL;  
  16.     int i;  
  17.     for( i=0; i<n; i++)  
  18.     {  
  19.         p = (NODE *)malloc(sizeof(NODE));  
  20.         p->no = i+1;  
  21.         p->next = NULL;  
  22.         if( h->next == NULL )  
  23.         {  
  24.             h->next = p;  
  25.             q = p;  
  26.         }  
  27.         else  
  28.         {  
  29.             q->next = p;  
  30.             q = q->next;  
  31.         }  
  32.     }  
  33.     return;  
  34. }  
  35.   
  36. int main( )  
  37. {  
  38.     int n;  
  39.     NODE *head=NULL, *q=NULL;  
  40.     scanf("%d",&n);  
  41.   
  42.     head = (NODE *)malloc(sizeof(NODE));  
  43.     head->no = -1;  
  44.     head->next = NULL;  
  45.   
  46.     SetLink( head, n );  
  47.     movenode( head );  
  48.   
  49.     q = head;  
  50.     while (q->next){  
  51.         printf("%d ",q->next->no);  
  52.         q = q->next;  
  53.     }   
  54.     printf("\n");  
  55.       
  56.     system("pause");  
  57.     return 0;  
  58. }  
  59.   
  60. /* PRESET CODE END - NEVER TOUCH CODE ABOVE */  
    /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct numLink
    {
    	int no;
    	struct numLink *next;
    } NODE;
    
    void movenode( NODE *head)
    {
    	NODE *p, *q, *last;
    	p = head->next;
    	last = head;
    	int count = 0;
    	while (last->next != NULL)
    	{
    		last = last->next;
    		count ++;
    	}
    	
    	for(int i=0;i < count/2 && count != 2; i ++)
    	{
    		q = p->next;
    		if (q->no % 2 == 0 )
    		{
    			p->next = q->next;
    			q->next = NULL;
    			last->next = q;
    			last = last->next;
    		}
    
    		p = p->next;
    	}
    }
    
    void SetLink( NODE *h, int n )
    {
    	NODE *p = NULL, *q = NULL;
    	int i;
    	for ( i = 0; i < n; i++)
    	{
    		p = (NODE *)malloc(sizeof(NODE));
    		p->no = i + 1;
    		p->next = NULL;
    		if ( h->next == NULL )
    		{
    			h->next = p;
    			q = p;
    		}
    		else
    		{
    			q->next = p;
    			q = q->next;
    		}
    	}
    	return;
    }
    
    int main( )
    {
    	int n;
    	NODE *head = NULL, *q = NULL;
    	scanf("%d", &n);
    
    	head = (NODE *)malloc(sizeof(NODE));
    	head->no = -1;
    	head->next = NULL;
    
    	SetLink( head, n );
    	movenode( head );
    
    	q = head;
    	while (q->next)
    	{
    		printf("%d ", q->next->no);
    		q = q->next;
    	}
    	printf("\n");
    
    	system("pause");
    	return 0;
    }
    
    /* PRESET CODE END - NEVER TOUCH CODE ABOVE */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值