c语言链表前m位移动到后面,BIT网教c语言练习_编程复习4链表移动

编写一个函数,将给定的带有头结点的单向链表的前m个节点移到链尾。

结构的定义:

struct node

{  int num;

struct node *next;

}

函数的原型:struct node *monenode( struct node *head,int m ), 其中:参数head 是单向链表的头指针;参数m 是要移动的节点数。函数的返回值是单向链表的头指针。

例如当m=4时:

0818b9ca8b590ca3270a3433284dd417.png

其实要写的就是一个函数,我直接贴出完整的程序(预设代码+要求提交的程序)

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

#include

#include

typedef struct numLink

{

int no;

struct numLink *next;

}NODE;

NODE *monenode( NODE *head, int m );

void SetLink( NODE *h, int n )

{

NODE *p=NULL, *q=NULL;

int i;

for( i=0; 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,m;

NODE *head=NULL, *q=NULL;

scanf("%d%d",&n,&m);

head = (NODE *)malloc(sizeof(NODE));

head->no = -1;

head->next = NULL;

SetLink( head, n );

q = monenode( head, m );

do

{

printf("%d ",q->next->no);

q = q->next;

}while( q->next != NULL );

printf("\n");

return 0;

}

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

NODE *monenode( NODE *head, int m )

{

NODE * p1,*p2,*p3;

int i=0;

p1 =p2=p3=head;

while(p1->next!=NULL && i

{

p1=p1->next;

i++;

}

if(p1->next != NULL)

{

//while结束后p1指向元素m

p2 = p1->next;

p1->next=NULL;

//把后面的元素放在前面

p1 = p2;

while(p1 != NULL)

{

p2 = p1->next; //暂存

p1->next = p3->next;

p3->next = p1;

p3=p3->next;

p1 = p2;

}

}

return head;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值