针对以下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; }