Google笔试:删除链表结点(挺难的)

作者爱码有道

来源公众号爱码有道

大家好,我是道哥。今天,我们来看一道谷歌笔试的题目。原题是英文陈述的,翻译过来后如下:

有一个足够长的单链表,并且头指针未知。靠近中间位置附近有一个结点,指针是p,请把该结点删除。

单链表删除结点何其容易啊,但是,谷歌会出这么简单的题目吗?可别忘了题目的限制:不知道头指针。


一. 单链表删除操作

首先,得搞清楚什么是单链表,这个问题很简单啊,来看看动图就明白了,这些水果都是我爱吃的。

这些水果,你应该都认识吧:西瓜,苹果,梨,橙子,香蕉,我天天买,也挺耗费钱的。

Google笔试:删除链表结点(挺难的)

单链表的动图


接下来,我们看看什么叫删除当前结点,比如,我们要把梨子从单链表中删除,动图如下:

Google笔试:删除链表结点(挺难的)

单链表结点删除的动图


很显然,要删除梨子,就得把前面的苹果和后面的橙子连接上,这样才能形成删除后的链表。

可是,现在的问题是:不知道单链表的头指针,所以也就没法知道苹果的指针,所以看来要歇菜了。

貌似无解,当时笔试时,我也曾自言自语,这不是在戏弄我吗?于是我写下了:Impossile(不可能)。


二. 摆脱僵化的思维

我当然也知道,谷歌不会那么无聊,还是来看看题目的解法吧。原始的单链表如下,待删除的结点为p:

Google笔试:删除链表结点(挺难的)


再看仍是没有思路啊。没关系,我们来看看删除后的预想结果:

Google笔试:删除链表结点(挺难的)


总之,目的就是要留下:100, 200, 300, 400. 那么可以这样去考虑,先把p结点的值改一下:

p->data = p->next->data;

Google笔试:删除链表结点(挺难的)


然后考虑把p后面的结点删除就行,这很容易吧!操作步骤和结果如下:

q = p->next;

p->next = p->next->next;

free(q);

Google笔试:删除链表结点(挺难的)

这样就达到目的了,看似不可能的事情,结果又可能了。谷歌、微软之类的公司,就喜欢问类似的问题。


跳出思维的局限很重要,要拥有创造性思维,也就是我们常说的:Think outside the box. 顺便来回顾一下当时的思维局限,以为是一定要删除梨子这个结点呢:

Google笔试:删除链表结点(挺难的)


这篇文章并不难,关键还是在于思路。我们也会一步一个脚印,争取每篇文章讲清讲透一件事,也希望大家阅读后有所收获,心情愉快。

展开阅读全文

页面更新:2024-05-19

标签:结点   笔试   目的   费钱   创造性思维   解法   梨子   微软   橙子   指针   题目   思路   思维   水果   苹果   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top