C. 线性链表的插入与删除

单点时限: 2.0 sec

内存限制: 256 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指向链表的头结点,如果链表为空,headNULL

显然,为了完成该链表维护工作,你需要实现上述两个辅助函数

插入操作中:

tarval表示将存放新值val的节点插入到值为tar的节点之后

(保证当链表不为空时,值为tar的节点一定在链表中,若有多个节点存放的值都为tar,则插入到第一个之后,若链表为空,则无视tar值,将val插入到head后面,即将head指向这个新的节点)

删除操作中:

tar表示删除存放值为tar的节点(若有多个节点存放的值是tar,则删除第一个)

如果链表为空则忽略当前操作

提示

只能使用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();
else
head = deleteLinklist(); /* 后续判题,细节隐藏不表 */ return 0;
} 虽说这只是一道不考的水题,但是弄得我头都大了;
NODE* insertLinklist(NODE* head, int tar, int val)
{
if(head==NULL)//空
{
NODE* p=(NODE*)malloc(sizeof(NODE));
p->data=val;
p->next=NULL;
head=p;
}
else
{
NODE* p=head;
NODE* pnew=(NODE*)malloc(sizeof(NODE));//动态申请指针
while(p->data!=tar)
{
p=p->next;
}
pnew->data=val;
pnew->next=p->next;
p->next=pnew;
} return head;
} NODE* deleteLinklist(NODE* head, int tar)
{
if(head==NULL) return head;
if(head->data==tar)
{
head=head->next;
return head;
}
NODE* last=head;
NODE* now=head->next;
while(now->data!=tar)
{
now=now->next;
last=last->next;
}
last->next=now->next;
return head;
}

指针还是用->吧,不然会CE;

NODE* p和NODE *p等价,看习惯;

还有要注意指针=指针,类型要看好;

如果要找到一个变量的地址,用int *p=&a;

&取地址

 

指针——可能我学的还只是c++的皮毛的更多相关文章

  1. Android开发音视频方向学习路线及资源分享,学完还怕什么互联网寒冬?

    接触Android音视频这一块已经有一段时间了,跟普通的应用层开发相比,的确更花费精力.期间为了学习音视频的录制,编码,处理也看过大大小小的几十个项目.总体感觉就是知识比较零散,对刚入门的朋友比较不友 ...

  2. 学数据库还不会Select,SQL Select详解,单表查询完全解析?

    查询操作是SQL语言中很重要的操作,我们今天就来详细的学习一下. 一.数据查询的语句格式 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式> .. ...

  3. C语言指针专题——指针难学的4点原因

    前一篇跟大家聊了聊指针的概念,可是就算了解了指针是什么,为什么依然感觉难学?我试着从几个点切入,聊聊指针难学之处. 文末会给大家推荐几本书,有需要的朋友可以看看! 难点1. 讨厌的星号 定义指针变量p ...

  4. iOS开发系列--C语言之指针

    概览 指针是C语言的精髓,但是很多初学者往往对于指针的概念并不深刻,以至于学完之后随着时间的推移越来越模糊,感觉指针难以掌握,本文通过简单的例子试图将指针解释清楚,今天的重点有几个方面: 什么是指针 ...

  5. 黑马程序员_ C语言基础之指针(三)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 指针是C语言的精髓,但是很多初学者往往对于指针的概念并不深刻,以至于学完之后随着时间的推移 ...

  6. (转)c指针

    转自:http://www.cnblogs.com/wchhuangya/archive/2009/12/24/1631121.html 这两天开始搞BREW了,用的是C的语法.上学时学过的C都还给学 ...

  7. 听翁恺老师mooc笔记(6)--指针运算

    指针值加1就是将指针值加上sizeof(指针所指变量的类型) 1+1=2,那么指针加1是加上了1这个数字吗?试一下,在代码中定义了char数组,char也是整数,数组名是ac,ac中有10个元素,0- ...

  8. C第九次博客作业--指针

    一.PTA实验作业 题目1:两个4位正整数的后两位互换 1. 本题PTA提交列 2. 设计思路 3.代码截图 本题调试过程碰到问题及PTA提交列表情况说明 刚开始想到的交换是令t=a;a=b;b=t这 ...

  9. 深入了解C指针

      前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级 ...

随机推荐

  1. (三)调用web服务

    (二)发布第一个WebService服务与DSWL文档解析讲解了如何发布一个web服务,本章主要讲述如何调用一个web服务. 这里有三种方式: 使用代理模式调用,需要将服务端的接口类拷贝到客户端中.( ...

  2. 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句

    原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...

  3. SOLID Principles

    Intention: more understandable, easier to maintain and easier to extend.(通过良好的设计使得代码easy and simple, ...

  4. vue中使用ts后,父组件获取执行子组件方法报错问题

    一.问题产生背景: 子组件的一个方法: update () { this.$nextTick(() => { this.ul_slots.forEach((ul, cur_slots_index ...

  5. 批量删除checkbox前台后台

    <%@ page contentType="text/html;charset=UTF-8" %><%@ include file="/WEB-INF/ ...

  6. \lib\cmsis\stm32f10x.h(298): error: #67: expected a "}"

    首先介绍一下csdn屏蔽广告 这个至关重要,请参考 https://blog.csdn.net/qq_40881680/article/details/82226562 更新KEIL5以后,原KEIL ...

  7. liunx mkisofs 命令的使用(制作iso)

    参考的博客 http://www.cnblogs.com/darkknightzh/p/8564483.html 有很多时候需要在liunx 环境中将文件打成 iso 所有很多时候就会用到这个命令(m ...

  8. leetcode-55. Jump Game · Array

    题面 这个题面挺简单的,不难理解.给定非负数组,每一个元素都可以看作是一个格子.其中每一个元素值都代表当前可跳跃的格子数,判断是否可以到达最后的格子. 样例 Input: [2,3,1,1,4] Ou ...

  9. leetcode-101. 判断对称树 · Tree + 递归

    题面 判断给定二叉树是否对称. Note : empty tree is valid. 算法 1. 根节点判空,若空,则返回true;(空树对称) 2. 根节点不空,递归判断左右子树.如果左右孩子都空 ...

  10. 批量删除redis

    批量删除"aso_"开头的key:redis-cli keys aso_* | xargs redis-cli del