本题要求实现一个插入函数,实现在链表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;
}
插入代码如下:
int InsertPost_link(LinkList llist, DataType x, DataType y)
{
PNode q;
PNode p=llist;
q=(PNode)malloc(sizeof(struct Node));
while(p != NULL && p->data != x)
{
p=p->next;
}
if(p==NULL)
{
printf("not exist data %d\n",x);
return 0;
}
q->data=y;
q->next=p->next;
p->next=q;
}
在链表插入需要考虑三种情况:头部插入,中间插入,尾部插入。
头部插入的时候需要移动头结点;中间插入需要注意新建的结点要先连接后面,再连接前面的;尾部插入的时候直接连接到前面的结点就行。