尴尬的面试题,没有解决,估计面试官在后台偷笑

2021-04-17 10:22:39 +08:00
 ads123

给定链表的头指针和一个结点指针,在 O(1)时间删除该结点。不删除头尾结点 typedef struct LNode{ int data; LNode *next; }LNode, *List;

函数的声明如下: void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);

我没有找出解决办法一直在纠结怎么直接下标索引。结果真是想多了

8810 次点击
所在节点    程序员
50 条回复
zhongrs232
2021-04-17 10:27:02 +08:00
查了一下解决办法,妙啊
zxCoder
2021-04-17 10:30:49 +08:00
node.next=node.next.next 这样?
BBCCBB
2021-04-17 10:43:38 +08:00
哈哈, 搜了一下, 值替换..哈哈哈
Kangst
2021-04-17 10:47:13 +08:00
查了一下,方法是将下一个结点的值赋给当前结点,然后删除下一个结点,就相当于删除了当前节点。简直是妙蛙种子吃了妙脆角进了米奇妙妙屋,妙到家了。
node.data = node.next.data;
node.next = node.next.next;
yucao
2021-04-17 10:47:15 +08:00
把 ToBeDeleted.next 节点的内容值复制给 ToBeDeleted 节点,然后删掉 ToBeDeleted.next 节点吧...
这感觉是纯脑筋急转弯...
Cu635
2021-04-17 10:50:00 +08:00
@zxCoder
@Kangst
@yucao
那么,原先的 node->next 怎么 free ?
aijam
2021-04-17 10:51:18 +08:00
这是很基本的面试题,不会的话大厂肯定没洗
0ZXYDDu796nVCFxq
2021-04-17 10:55:22 +08:00
这种题没意义
yucao
2021-04-17 10:55:54 +08:00
@Cu635
这有何难?值复制完成后,
LNode* p = pToBeDeleted.next;
pToBeDeleted.next = pToBeDeleted.next.next;
free(p);
zxCoder
2021-04-17 10:56:15 +08:00
@Cu635

var t=node.next;
node.next=node.next.next;
free(t);

这样?


(free 啥啊 让 GC 自己去 free
zxCoder
2021-04-17 10:56:36 +08:00
@zxCoder 不对 写错了
constexpr
2021-04-17 11:02:27 +08:00
不遍历的话被删除的结点的父结点的指针如何设置呢?
疑惑
zhongrs232
2021-04-17 11:02:47 +08:00
想了下,这题应该是被题目坑了,如果函数参数里把头结点去掉,只留一个待删除结点作为参数,我估计大部人都能想到解法。
constexpr
2021-04-17 11:05:43 +08:00
@constexpr 如果是分配在连续空间,指针做减法倒是可以取到被删除结点的父结点
JokerZX
2021-04-17 11:23:09 +08:00
那他给头结点做啥呀
xuanbg
2021-04-17 11:25:47 +08:00
node = node.next
zhuangzhuang1988
2021-04-17 11:30:42 +08:00
"我们是专业的,再好笑都不会笑,除非忍不住"
paoqi2048
2021-04-17 11:33:34 +08:00
@JokerZX 如果待删节点为末尾节点,还是要从头节点开始遍历
nnqijiu
2021-04-17 12:45:48 +08:00
头结点就是没用的信息,算法都玩技巧了
Knuth
2021-04-17 12:49:11 +08:00
@paoqi2048 可以判断 node. next,不用遍历

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/771236

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX