本题要求实现一个插入函数,实现在链表llist中的元素x之后插入一个元素y的操作。
函数接口定义:
int InsertPost_link(LinkList llist, DataType x, DataType y);
其中 llist是操作的链表,x是待插入元素y的前驱节点元素,y是待插入的元素
裁判测试程序样例:
#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
struct Node {
DataType data;
struct Node* next;
};
typedef struct Node *PNode;
typedef struct Node *LinkList;
LinkList SetNullList_Link()
{
LinkList head = (LinkList)malloc(sizeof(struct Node));
if (head != NULL) head->next = NULL;
else printf("alloc failure");
return head;
}
int IsNull_Link(LinkList llist)
{
return(llist->next == NULL);
}
void CreateList(struct Node *head)
{
PNode p = NULL; int data;
scanf("%d", &data);
while (data != -1) {
p = (struct Node*)malloc(sizeof(struct Node));
p->data = data;
p->next = head->next;
head->next = p;
scanf("%d", &data);
}
}
void print(LinkList head)
{
PNode p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
}
void DestoryList_Link(LinkList head)
{
PNode pre = head; PNode p = pre->next;
while (p) {
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
int InsertPost_link(LinkList llist, DataType x, DataType y)
{
@@
}
int main()
{
LinkList head = NULL;
PNode p = NULL;
int searchdata,deldata, insertdata;
head = SetNullList_Link();
CreateList(head);
scanf("%d %d", &searchdata,&insertdata);
InsertPost_link(head, searchdata, insertdata);
print(head);
DestoryList_Link(head);
return 0;
}
输入样例:
1 5 10 15 20 -1
10 99
输出样例:
20 15 10 99 5 1
输入样例:
1 5 10 15 20 -1
6 99
输出样例:
not exist data 6
20 15 10 5 1
int InsertPost_link(LinkList llist, DataType x, DataType y)
{
LinkList p = llist->next;
LinkList q=NULL;
while (p->data != x)
{
p = p->next;
if (p == NULL)
{
printf("not exist data %d\n",x);
return 0;
}
}
q = (LinkList)malloc(sizeof(struct Node));
if (q != NULL)
{
q->next=NULL;
q->data = y;
q->next = p->next;
p->next = q;
return 0;
}
}