在单链表的第i个位置后插入一个节点(阿里+腾讯等面试题总结)
时间:2014.04.26
地点:基地
—————————————————————————
一、题目
题目是非常easy和基础,就是在单链表的第i个位置后插入一个节点。要求写代码,5分钟之内完毕。面腾讯和阿里的同学都有面到,于是总结几个技巧。这样的限时写代码往往一紧张尽管特基础但稍加不注意也非常容易出错。
—————————————————————————
二、分析
1.先依照一般的步骤,我们要得到第链表第i个位置的指针。
2.然后再在刚刚得到的指针之后插入新节点
Node* ListLocate(Node* head_ptr,size_t position)
{
Node* curosr=nullptr;
for(size_t i=1;(i<position)&&(cursor!=nullptr);++i)
cursor=cursor->get_link();
return cursor;
}
const Node* ListLocate(const Node* head_ptr,size_t position)
{
const Node* curosr=nullptr;
for(size_t i=1;(i<position)&&(cursor!=nullptr);++i)
cursor=cursor->get_link();
return cursor;
}
void ListInsert(Node* previous_ptr;const Node::value_type& entry)
{
Node* insert_ptr=new Node(entry,previous_ptr->get_link());
previous_ptr=insert_ptr;
}
—————————————————————————
三、总结
这里获得第i个位置的指针写了两个版本号,即为提供通用性,当然这里对于题目要求的是多余的,由于题目要求是肯定要通过指针改动链表。个人比較喜欢固定一种模式,即经常使用的代码编写模式,假设算法实现原理是一样的,仅仅是在代码的表现上有所差别,我认为就不是必需花心思耍花样。今天用cursor遍历链表,明天用list_ptr遍历链表,往后也不easy出错。
在链表的实现中比方还可提炼几种编码规范:
1.使用cursor遍历链表指针
for(Node* head_ptr;cursor!=nullptr;cursor=curosr->get_link())
{
.......
}
2.提供两个版本号的编号定位节点的函数或者匹配定位节点的函数
在单链表的第i个位置后插入一个节点(阿里+腾讯等面试题总结)的更多相关文章
- 【剑指offer】单链表尾部插入一个节点
#include <iostream> using namespace std; //链表结构体 struct ListNode { int m_Value; ListNode *next ...
- C语言实现单链表的遍历,逆序,插入,删除
单链表的遍历,逆序,插入,删除 #include<stdio.h> #include<stdlib.h> #include <string.h> #define b ...
- Python实现单链表数据的添加、删除、插入操作
Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...
- 链表操作----将单链表向右旋转 K 个位置
给定一个单链表,设计一个算法实现链表向右旋转 K 个位置. 举例: 给定 1->2->3->4->5->6->NULL, K=3 则 4->5-> ...
- 单链表创建、删除、查找、插入之C语言实现
本文将详细的介绍C语言单链表的创建.删除.查找.插入以及输出功能 一.创建 #include<stdio.h> #include<stdlib.h> typedef int E ...
- 面试题28:单链表一次遍历删除从后往前的第n个节点
class Solution { public: ListNode *removeNthFromEnd(ListNode *head, int n) { ListNode* fake = ); fak ...
- C#单链表
顺序表是用地址连续的存储单元顺序存储线性表中的各个数据元素, 逻辑上相邻的数据元素在物理位置上也相邻.因此,在顺序表中查找任何一个位置上的数据元素非常方便, 这是顺序存储的优点. 但是, 在对顺序表进 ...
- 【 C# 】(一) ------------- 泛型带头节点的单链表,双向链表实现
在编程领域,数据结构与算法向来都是提升编程能力的重点.而一般常见的数据结构是链表,栈,队列,树等.事实上C#也已经封装好了这些数据结构,在头文件 System.Collections.Generic ...
- 线性表之单链表C++实现
线性表之单链表 一.头文件:LinkedList.h //单链表是用一组任意的存储单元存放线性表的元素,这组单元可以是连续的也可以是不连续的,甚至可以是零散分布在内存中的任意位置. //单链表头文件 ...
随机推荐
- 联通-长春处,FDD和TDD宏站,数据业务接入时延期望值默认值应为80ms
有小坑 备注:若已经跑过V5.40.00_Alpha1_Baseline.sql或V5.30.02_Beta_TO_V5.40.00_Alpha1.sql的脚本,再次运行升级脚本修改不成功,需手动在数 ...
- C#上传图片(含有图片大小格式过滤以及改变像素安全存储)
示例一: public JsonResult Upload(string parameter) { ]; try { //LogHelper.Info("文件长度:" + file ...
- Android Studio引用第三方jar包(例如:使用LitePal)
如何使用LitePal的教程网上很多,不过对于新手,这些教程中遗漏了将第三方jar包拷贝到app->libs路径下后,还需要add as library. 下载LitePal 这时操作步骤如下: ...
- FFT(快速傅里叶变换)摘要
怎么说呢...这次的代码码风有点... 从这篇博客开始,我终于会用LATEX了!撒花 注:以下涉及多项式的n均表示多项式的次数 FFT用途 很简单,多项式相乘. FFT原理 如果暴力乘,复杂度是$O( ...
- 使用crontab命令添加计划任务
Ubuntu 16.04, 计划任务 就是 有(时间)计划地执行(做)任务,有计划 包括 定时执行(在哪些时间点执行任务).按照周期执行(每隔多少时间执行任务). 那么,什么是任务呢?就是 自己想要干 ...
- sonar Lint ----code bad smell
类名注释报黄: 去掉这段黄做法:alt+enter 本文参考: http://www.cnblogs.com/xxoome/p/6677170.html
- tensorflow-训练(train)/测试(test)
一个TFRecords 文件为一个字符串序列.这种格式并非随机获取,它比较适合大规模的数据流,而不太适合需要快速分区或其他非序列获取方式. 操作组 操作 Training Optimizers,Gra ...
- Windows环境下python的安装与使用
Windows环境下python的安装与使用 一.python如何运行程序 首先说一下python解释器,它是一种让其他程序运行起来的程序.当你编写了一段python程序,python解释器将读取程序 ...
- 方法调用---springMVC中调用controller的方法
我们有一个路由StudentController,里面有一个方法count().如果要在另外一个GradeController中调用count()方法有2种方式: 因为StudentControlle ...
- NET WebAPi之断点续传下载1
ASP.NET WebAPi之断点续传下载(上) 前言 之前一直感觉断点续传比较神秘,于是想去一探究竟,不知从何入手,以为就写写逻辑就行,结果搜索一番,还得了解相关http协议知识,又花了许久功夫 ...