l*******l 发帖数: 248 | 1 How do you reverse a linked list. Why don’t you use recur-
sion?
Node* reverseLinkedList(Node *base ){
Node* next; Node *current ;
current = base;
node *previous = NULL;
while(current != NULL ) {
next = current->next;
current->next = previous;
previous = current;
current = next;
}
return (previous);
} |
l*******l 发帖数: 248 | 2 我知道有三种方法,最efficent的是把指针方向换一下就可以了,in place省内存。
第二种是,第一个和最后一个换,第二个和倒数第二个换
第三种是把整个list拷贝到新的list上去
这个到底是哪一种??? |
x********o 发帖数: 519 | 3 the first one
【在 l*******l 的大作中提到】 : 我知道有三种方法,最efficent的是把指针方向换一下就可以了,in place省内存。 : 第二种是,第一个和最后一个换,第二个和倒数第二个换 : 第三种是把整个list拷贝到新的list上去 : 这个到底是哪一种???
|
n******m 发帖数: 169 | 4 这个是标准的算法,你画画图就知道啦。
用三个指针,previous, current, next 记住正在处理的这个node及其前后,这样再行
进过程中就不会迷失。然后一个一个把指向反过来(current->next=previous)。
【在 l*******l 的大作中提到】 : How do you reverse a linked list. Why don’t you use recur- : sion? : Node* reverseLinkedList(Node *base ){ : Node* next; Node *current ; : current = base; : node *previous = NULL; : while(current != NULL ) { : next = current->next; : current->next = previous; : previous = current;
|
n******m 发帖数: 169 | 5 这段code是把链表的指针一个一个反过来。
你说的第二种,我感觉不适用于链表。这是单向的链表,没法往后退的。就是说你不能
轻易的找到倒数第二个,倒数第三个。。。
第三种可以。
【在 l*******l 的大作中提到】 : 我知道有三种方法,最efficent的是把指针方向换一下就可以了,in place省内存。 : 第二种是,第一个和最后一个换,第二个和倒数第二个换 : 第三种是把整个list拷贝到新的list上去 : 这个到底是哪一种???
|
l*******l 发帖数: 248 | 6 第二种可能针对doubly linked list来说的
【在 n******m 的大作中提到】 : 这段code是把链表的指针一个一个反过来。 : 你说的第二种,我感觉不适用于链表。这是单向的链表,没法往后退的。就是说你不能 : 轻易的找到倒数第二个,倒数第三个。。。 : 第三种可以。
|
C****y 发帖数: 38 | 7 double的话,直接next和previous对掉不就完了。。
【在 l*******l 的大作中提到】 : 第二种可能针对doubly linked list来说的
|
r*******y 发帖数: 1081 | 8 draw a picture.
【在 l*******l 的大作中提到】 : How do you reverse a linked list. Why don’t you use recur- : sion? : Node* reverseLinkedList(Node *base ){ : Node* next; Node *current ; : current = base; : node *previous = NULL; : while(current != NULL ) { : next = current->next; : current->next = previous; : previous = current;
|