52 链表处理*

编写一个函数,给定的带有头结点的单向链表 head,给定某结点的数据域值 m,将该结点移到链首。

结构的定义:

typedef struct node
{
  int num;

  struct node *next;
} SNODE;

函数的原型:SNODE *movenode(SNODE *head, int m);

其中:参数 head 是单向链表的头指针;参数 m 是某结点的num成员的值。

例如输入结点数 n=7,则将结点数值域值 m=5 的结点移动到链首。函数运行前后链表的情况如下图所示。(....可是没图....看测试用例吧)



预设代码

/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */

#include <stdio.h>
#include <stdlib.h>

typedef struct sdata
{  int num;
   struct sdata *next;
} SNODE;

void movenode( SNODE *, int );

void setlink( SNODE * head, int n )
{   
	SNODE *p;

	while ( n > 0 )
	{   p = ( SNODE * ) malloc( sizeof( SNODE ) );
		p->num = n;
		p->next = head->next;
		head->next = p;
		n --;
	}
}

void outlink( SNODE * head )
{
	while( head->next != NULL )
	{
		head = head->next;
		printf( "%d,", head->num );
    }
	return;
}

int main( )
{   int n, m;
	SNODE * head = NULL;

	scanf("%d%d", &n, &m );
	head = ( SNODE * ) malloc( sizeof( SNODE ) );
	head->num = -1;
	head->next = NULL;
	setlink( head, n );

	movenode( head, m );   /* This is waiting for you. */

	outlink( head );
    printf("\n");
    return 0;
}

/* PRESET CODE END - NEVER TOUCH CODE ABOVE */


提交的子函数


void movenode(SNODE* head,int m)
{
	SNODE * t1;
	SNODE *t2;
	t1 = t2 =head;
	while((t2=t1->next)!=NULL)
	{
		if(t2->num == m)
		{
			t1->next = t2->next;
			t2->next = head->next;
			head->next = t2;
			break;
		}
		t1 = t1->next;
    }
}

链表操作重在熟悉链表的结构,都是些基本的概念,程序本身没什么内容,就是练习下基本操作。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值