编程复习4链表移动

来源:互联网 发布:java urlencoder 乱码 编辑:程序博客网 时间:2024/05/17 08:25

编写一个函数,将给定的带有头结点的单向链表的前m个节点移到链尾。
    结构的定义:
struct node
{  int num;
             struct node *next;
}
函数的原型:struct node *monenode( struct node *head,int m ), 其中:参数head 是单向链表的头指针;参数m 是要移动的节点数。函数的返回值是单向链表的头指针。
例如当m=4时:



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


/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */#include <stdio.h>#include <stdlib.h>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<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,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<m){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;}






原创粉丝点击