s***i 发帖数: 49 | 1 我看这么algorithm看来看去看不出 list 会被成功reverse. 我试着作图,但是一走两
步就乱套了。 大家谁能做个简单的图让我看明白?
node *reverse (node *in) {
node *out = NULL;
while (in) {
node *tmp = in->next;
in->next = out;
out = in;
in = tmp;
}
return out;
} |
a**a 发帖数: 416 | 2 这个还需要作图吗? 你把in看作是输入list, out就是输出list,
这个算法就是不停地把in的head卸下移到out的头上去。
【在 s***i 的大作中提到】 : 我看这么algorithm看来看去看不出 list 会被成功reverse. 我试着作图,但是一走两 : 步就乱套了。 大家谁能做个简单的图让我看明白? : node *reverse (node *in) { : node *out = NULL; : while (in) { : node *tmp = in->next; : in->next = out; : out = in; : in = tmp; : }
|
F********g 发帖数: 753 | |
l*****d 发帖数: 359 | 4 先把第一个node变成tail, 然后把第二个的node插到前面,然后把next node再插到最
前面,依次类推。 in指向没被移动的第一个node,out指向刚被插到最前面去的node。
循环的时候1. 先把in指的node后面那个node记住(tmp),2. 然后把in指的node移到最
前面,然后3.更新out指针及4. in指针。
【在 s***i 的大作中提到】 : 我看这么algorithm看来看去看不出 list 会被成功reverse. 我试着作图,但是一走两 : 步就乱套了。 大家谁能做个简单的图让我看明白? : node *reverse (node *in) { : node *out = NULL; : while (in) { : node *tmp = in->next; : in->next = out; : out = in; : in = tmp; : }
|
l*****d 发帖数: 359 | 5 en, much easier to think in this way
【在 a**a 的大作中提到】 : 这个还需要作图吗? 你把in看作是输入list, out就是输出list, : 这个算法就是不停地把in的head卸下移到out的头上去。
|