题目描述
本题要求实现一个插入函数,实现在链表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
求解思路
注意看主函数main里面调用的语法,说明传入的llist是头结点
InsertPost_link(head, searchdata, insertdata);
正确代码
int InsertPost_link(LinkList llist, DataType x, DataType y) {
PNode current = llist->next;
//通过current不断遍历直到current的data是x
while (current != NULL && current->data != x) {
current = current->next;
}
//如果current找到了x 那么就不为NULL 否则一直走到链表末端成为NULL
if (current != NULL) {
PNode newNode = (PNode)malloc(sizeof(struct Node));
if (newNode == NULL)
{
// 内存分配失败
return 0;
}
newNode->data = y;
newNode->next = current->next;
current->next = newNode;
return 1;
}
else
{
printf("not exist data %d\n",x);
}
return 0;
}