单点时限: 2.0 sec
内存限制: 512 MB
实现线性链表的插入与删除操作
只需完成给定函数的定义。
NODE* insertLinklist(NODE* head, int tar, int val) {
// TODO
}
NODE* deleteLinklist(NODE* head, int tar) {
// TODO
}
其中
NODE
表示链表的结构体,定义如下
typedef struct node
{
int data; //存储数据
struct node* next; //指向下一个结点的指针
} NODE;
本题没有表头结点,head
指向链表的第一个元素
特别的,如果链表为空,head
为NULL
显然,为了完成该链表维护工作,你需要实现上述两个辅助函数
插入操作中:
tar
,val
表示将存放新值$val$的结点插入到值为$tar$的结点之前
数据保证:
head
指向这个新的结点删除操作中:
tar
表示删除存放值为$tar$的结点
若有多个结点存放的值是$tar$,则删除第一个
特别的,在删除操作中,你需要对两种特殊情况作出处理:
EMPTY LIST
NOT FOUND
只能使用C或者C++提交。
对于C/C++,判题程序类似,如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* next;
} NODE;
NODE* insertLinklist(NODE* head, int tar, int val);
NODE* deleteLinklist(NODE* head, int tar);
/* 你的代码将会被嵌入在这个位置 */
int main()
{
/* 输入及其他处理,细节隐藏不表 */
NODE* head = createLinklist(/* 创建链表,细节隐藏不表 */);
for (/* 若干操作,细节隐藏不表 */)
if(/* 判断插入还是删除,细节隐藏不表 */)
head = insertLinklist(head, tar, val);
else
head = deleteLinklist(head, val);
/* 后续判题,细节隐藏不表 */
return 0;
}