问答题
针对以下C语言程序,请按要求回答问题。
已知link. c源程序如下:
/*link.
c程序对单向链表进行操作,首先建立一个单向链表,然后根据用户的选择可以对其进行插入结点、删除结点和链表反转操作*/
#include<stdio.h>
#include<stdlib.h>
typedef struct list_node*list_pointer; //定义链表指针
typedef struct list_node{ //定义链表结构
int data;
list_pointer link;
}list_node;
//用到的操作函数
list_pointer
create(); //建立一个单向链表
void
insert(list_pointer*p_ptr, list_pointer node);
//在node后加入一个新的结点
void delete_node(list_pointer*p_ptr,
list_pointer trail, list_pointer node);
//删除前一个结点是trail的当前结点node
void print(list_pointer*p_ptr);
//打印链表结点中的值
list_pointer invert(list_pointer lead);
//反转链表
int main()
{
list_pointer ptr=NULL;
list_pointer node,
trail;
list_pointer * p=&ptr;
int choose, location, i;
printf("you should create
a link first:/n");
prt=create();
//*ptr 指向链表的第一个结点*/
print(ptr);
//根据用户的不同选择进行相应的操作;
printf("input number 0, you can quit
the program/n");
printf("input number 1, you can insert a new
node to link/n");
printf("input number 2, you can delete a node
from the linkkn");
printf("input number 3, you can invert the
link/n");
printf("please input you choicekn");
scanf(" %d", &choose)
while(choose!=0) {
switch(choose){
case 1:
i=1;
while(i<location){
node=node->link;
i++;
}
insert(p,node); /*p为指向ptr的指针*/
print(ptr);
break;
case 2:
printf("you will delete a
node from the link/n");
printf("please input the
location of the node:/n");
scanf("%d",
&location);
node=ptr;
if(location==1)
trail=NULL;
trail=ptr;
i=1;
while<i<location){
trail=trail->link;
i++;
}
node=trail->link;
delete_node(p, trail, node);
print(ptr);
break;
case 3:
printf("you will invert the
link/n");
ptr=invert (ptr)
print(ptr);
break;
default :
break
return -1:
}
printf("please input you
choice/n");
scanf("%d",&choose);
}
return 0;
//根据用户的输入值建立一个新的单向链表:
list_pointer create()
{
int i, current, length;
list_pointer p1,
p2, head;
printf("please input the node number of the
link:/n");
scanf("%d", &length);
printf("the
number of the link is: %d", length);
printf("please input the
data for the link node: /n");
i=0;
p1=p2=(list_pointer)malloc(sizeof(list_node));
head=p1;
for(i=1; i<length; i++){
scanf("%d", ¤t);
p1->data=current;
p2->link=p1;
p2=p1;
p1=(list_pointer)malloc(sizeof(list_node));
}
p2->link=NULL;
return
head;
}