4-4-12.c

来自「2005软件工程师考试下午编程题源代码」· C语言 代码 · 共 59 行

C
59
字号
/*中国系统分析员顾问团,http://www.csai.cn*/
/*程序员下午考试指南书籍源码*/

#include <stdio.h>
#include <malloc.h>
typedef struct node{
int key;
struct node *next;
}*LinkedList;

int movetoend(LinkedList La, int i){
LinkedList p,q,prep;
int k = 1;
p = La->next;prep = La;
while(p&&p->key != i) {/*查找第i个元素并使指针p指向该结点*/
prep = p; p = p->next;k++;
}
if(!p || k > i) return -1;
if(!p->next) /*第i个元素结点已经是表尾结点,则无需移动*/
return 0;
q = p;
while(q->next) q = q->next; /*查找表尾并使q指向表尾结点*/
 prep->next  = p->next;
p->next = NULL;
q->next = p;
return 0;
}

//下面的代码是测试时加进来的.
LinkedList Inilink(int *data,int n)
{ LinkedList head,p,q;
  int i;
  p=(LinkedList)malloc(sizeof(LinkedList));
  p->key=data[0];
  p->next=NULL;
  head=p;
  for(i=1;i<n;i++)
  {
	 q=(LinkedList)malloc(sizeof(LinkedList));
	 q->key=data[i];
	 q->next=NULL;
	 p->next=q;
	 p=q;
   }
return head;

}
main()
{ int a[]={13,15,17,18,23,1,2,3,4,5,6,7,8,9,10};
  LinkedList linka;
  linka=Inilink(a,15);
  movetoend(linka,23);
  while(linka)
  {
	printf(" %d ",linka->key);
	linka=linka->next;
  }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?