和面试官对两道数据结构算法题持不同意见,望各位前辈给予指教,在此多谢各位了
今天去面试,和面试官对两道数据结构算法题持不同意见,望各位前辈给予指教,在此多谢各位了!
题目:反转单链表
我的答案:
Public void ReversLinkList(LinkList H)
{
Node p=H.Next;
Node q= new Node;
H.Next= null;
While(p!= null)
{
q=p;
p=p.Next;
q.Next=H.Next;
H.Next=q;
}
}
面试官估计是没看懂,或者认为我写的不对,说给我提示去想循环和想交换两个结点。。我当时就被弄晕了,然后也不知道他是怎么想的。。。试图去理解,还是没弄明白,他好像要给我一些提示,让我顺着他的想法去给一个方法,但是我又觉得我的方法是对的。
然后我就努力去想我的,但是因为受他的几次干扰我思路也被打断了,最后终于给他讲明白了,没想到他说我的方法不好,很复杂,然后他又说了他的方法:
面试官的方法:
从链表的开始循环到结束,然后从最后一个结点开始往前依次交换结点。
我想了想没有想出面试官的方法为什么比我的好:(
面试结果这道题写的是 我的方法很笨。。。。
请问各位大侠,我的方法真的很笨吗?
然后还有一道:
求两个单链表是否有相同结点?如果有相同结点,返回第一个结点
为了方便只写思路吧。
我的思路:
1. 遍历两个链表,如果最后的结点相同则有相同结点,否则没有。
2. 比较两个链表的长度M和N(此处假设M>N),然后对于较长的那个链表,指针次后移直到 M-N 的位置(因为多出来的结点肯定不是相同结点),然后再去循环比较。
面试官说前部分对了,后半部分不对,因为我们并不知道哪一个是相同的结点,所以我从前往后找并不知道哪个在相同结点之前的结点多,所以要从后往前找。
当时被他给说晕了,所以说哦,是这样。
可是回来以后我还是觉得我的没错,因为自从相同结点到链表的最后一个结点,对于两个链表来讲结点个数是一样的,所以链表长的那个肯定是在相同结点之前结点比较多的那个。并不存在面试官所说的问题
面试结果是:
前半部分正确,后半部分只能在引导下才能领悟。
看了这两个面试结果我觉得很迷惑,请各位前辈指点迷津,多谢了!