Redian新闻
>
Burton右耳后面好像破了,但是他不让我们看
avatar
Burton右耳后面好像破了,但是他不让我们看# pets - 心有所宠
a*0
1
我本来用递归方法 但是超时了 本身代码没错 就是慢 为什么慢 因为在每个递归函数
中有O(n)的操作 这样n次递归导致总体O(n平方)
如果坚持递归方法 需要返回调整好的list的尾节点的下一个节点 这个是从网友那里学
来的 其实这个过程有点tricky 为什么不简单返回 list的头节点或者尾节点 而要返
回尾节点的下一个节点呢? 思路是这样的 尾节点经过调整已经不是原来的尾节点了
它指向的下一个已经不是原来的顺序 那为什么不返回头节点呢 ? 头节点其实不需要
返回 每次用next找就可以了 而且每次拿到头节点也不好用 必须多次next找到尾节点
又超时了
网友的方法 我改编成了java的 后边也有返回尾节点的方法
但是很容易出错 如果面试 还是用循环而不是递归的方法 当然面试无法检查是不是超
时 所以用我最早的方法也可以吧
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {

public void reorderList(ListNode head) {

if(head == null)
return;

ListNode scanner = head;
int length =0;
while(scanner != null){
length++;
scanner = scanner.next;
}

reorderHelper(head, length);


}


// helper returns the very last node's next node
public ListNode reorderHelper(ListNode start, int range){


if(range ==0)
return null;

ListNode result = null;

// range == 1 and range ==2 cases don't need adjustment
if(range ==1){
result = start.next;
start.next = null;
return result;
}

if(range ==2){
result = start.next.next;
start.next.next = null;
return result;
}


ListNode temp = reorderHelper(start.next, range -2);

result = temp.next;
temp.next = start.next;
start.next = temp;


return result;
}

}
但是我想如果一定要返回尾节点如何 我也找到了答案 但是返回值仅仅用于存储其下一
个节点
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {

public void reorderList(ListNode head) {

if(head == null)
return;

ListNode scanner = head;
int length =0;
while(scanner != null){
length++;
scanner = scanner.next;
}

reorderHelper(head, length);


}


// helper returns the very last node's next node
public ListNode reorderHelper(ListNode start, int range){


if(range ==0)
return null;

ListNode result = null;

// range == 1 and range ==2 cases don't need adjustment
if(range ==1){
result = new ListNode(0);
result.next = start.next;
start.next = null;
return result;
}

if(range ==2){
result = new ListNode(0);
result.next = start.next.next;
start.next.next = null;
return result;
}


ListNode temp = reorderHelper(start.next, range -2);

result = new ListNode(0);
result.next = temp.next.next;
temp.next.next = start.next;
start.next = temp.next;


return result;
}

}
avatar
s*i
2
天一也不冤啊。
avatar
p*n
3
昨天在沙发上摸burton,突然摸到他有耳朵下面一块硬的,发现好大一块毛粘在一起,
于是我尝试掀开他耳朵扒开下面的毛看,一人搞不定,未遂。然后喊来狗爸一起看,看
到红色的液体。狗爸说要把毛剪掉一些才能看清楚,可是burton各种扭,不配合。然后
我说把用生理盐水把毛冲开看看,结果burton挣扎得更厉害了,从头到尾都没看到伤口
在哪里,不知道是不是在dog park玩的时候被咬破了。
狗爸今早送他去看vet了,可是我强烈怀疑,vet能搞定他不乱动么?
avatar
a*0
4
超时的递归方法
public class ReorderListSlow {

public void reorderList(ListNode head) {

if(head == null)
return;

if(head.next ==null)
return;

if(head.next.next == null)
return;



ListNode scanner = head;
int length =0;
while(scanner != null){
length++;
scanner = scanner.next;
}

head = reorderHelper(head, length);


}


public ListNode reorderHelper(ListNode start, int range){

ListNode scanner =start;
ListNode last = start;
int count = range-2;

if(range ==0)
return null;

if(range ==1)
return start;


while(count >0){
count--;
scanner = scanner.next;
}

last = scanner.next;
scanner.next = null;

ListNode temp = reorderHelper(start.next, range -2);

start.next = last;
last.next = temp;


return start;
}

}
avatar
b*r
5
vet那有助手,还可以五花大绑绑起来。。。他不让碰估计挺疼的
avatar
l*a
6
这道题可以看成三道小题
1)find the middle of singly linked list
2)in-place reverse singly linked list
3)merge two linked list
每道题都是最基本的题吧,都是O(n)不需要recursion



【在 a**********0 的大作中提到】
: 我本来用递归方法 但是超时了 本身代码没错 就是慢 为什么慢 因为在每个递归函数
: 中有O(n)的操作 这样n次递归导致总体O(n平方)
: 如果坚持递归方法 需要返回调整好的list的尾节点的下一个节点 这个是从网友那里学
: 来的 其实这个过程有点tricky 为什么不简单返回 list的头节点或者尾节点 而要返
: 回尾节点的下一个节点呢? 思路是这样的 尾节点经过调整已经不是原来的尾节点了
: 它指向的下一个已经不是原来的顺序 那为什么不返回头节点呢 ? 头节点其实不需要
: 返回 每次用next找就可以了 而且每次拿到头节点也不好用 必须多次next找到尾节点
: 又超时了
: 网友的方法 我改编成了java的 后边也有返回尾节点的方法
: 但是很容易出错 如果面试 还是用循环而不是递归的方法 当然面试无法检查是不是超

avatar
r*a
7
能,Misty上次脚上长了东西,也是死也不给我看,只能带去vet。然后vet把我请出去
回避,就搞定了,不过vet出来的时候脸拉的老长

【在 p******n 的大作中提到】
: 昨天在沙发上摸burton,突然摸到他有耳朵下面一块硬的,发现好大一块毛粘在一起,
: 于是我尝试掀开他耳朵扒开下面的毛看,一人搞不定,未遂。然后喊来狗爸一起看,看
: 到红色的液体。狗爸说要把毛剪掉一些才能看清楚,可是burton各种扭,不配合。然后
: 我说把用生理盐水把毛冲开看看,结果burton挣扎得更厉害了,从头到尾都没看到伤口
: 在哪里,不知道是不是在dog park玩的时候被咬破了。
: 狗爸今早送他去看vet了,可是我强烈怀疑,vet能搞定他不乱动么?

avatar
Y*a
8

没事的。vet可不是吃素的

【在 p******n 的大作中提到】
: 昨天在沙发上摸burton,突然摸到他有耳朵下面一块硬的,发现好大一块毛粘在一起,
: 于是我尝试掀开他耳朵扒开下面的毛看,一人搞不定,未遂。然后喊来狗爸一起看,看
: 到红色的液体。狗爸说要把毛剪掉一些才能看清楚,可是burton各种扭,不配合。然后
: 我说把用生理盐水把毛冲开看看,结果burton挣扎得更厉害了,从头到尾都没看到伤口
: 在哪里,不知道是不是在dog park玩的时候被咬破了。
: 狗爸今早送他去看vet了,可是我强烈怀疑,vet能搞定他不乱动么?

avatar
p*n
9
狗爸带burton看病回来了。
vet把他耳朵背后的毛剃了,伤口不大,耳朵上面也长了好多小红点,不过vet也不确定
是他自己挠的,还是被咬的,于是给更新了个3年的rabies,测了个heartworm,开了7
个月的Heartworm的药,开了消炎药,开了外服药。。。
我在想这个vet是有多久没进账了
avatar
r*a
10
晕,bless赶紧好,别再挠啦

7

【在 p******n 的大作中提到】
: 狗爸带burton看病回来了。
: vet把他耳朵背后的毛剃了,伤口不大,耳朵上面也长了好多小红点,不过vet也不确定
: 是他自己挠的,还是被咬的,于是给更新了个3年的rabies,测了个heartworm,开了7
: 个月的Heartworm的药,开了消炎药,开了外服药。。。
: 我在想这个vet是有多久没进账了

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。