在单链表的第i个位置后插入一个节点(阿里+腾讯等面试题总结)

来源:互联网 发布:淘宝好评大全50字 编辑:程序博客网 时间:2024/05/20 15:11

时间:2014.04.26

地点:基地

—————————————————————————

一、题目

  题目是很简单和基础,就是在单链表的第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遍历链表,往后也不容易出错。在链表的实现中比如还可提炼几种编码规范:

1.使用cursor遍历链表指针

for(Node* head_ptr;cursor!=nullptr;cursor=curosr->get_link()){    .......}

2.提供两个版本的编号定位节点的函数或者匹配定位节点的函数

0 0
原创粉丝点击