面试最常见题之一(也许没有之一),原理简单,但如果不熟练的话,也容易把代码写复杂了。
下面是一个简洁的实现。
struct list {
int value;
struct list *next;
};
typedef struct list LIST;
LIST* reverse_list(LIST *head){
LIST* pre = NULL;
LIST* next;
while(head) {
next = head->next;
head->next = pre;
pre = head;
head = next;
}
return pre;
}
测试用的代码:
bool insert_list(struct list *head, int i) {
struct list *current = (struct list *)malloc(sizeof(struct list));
if (current==NULL) {
return false;
}
current->value = i;
struct list *next = head->next;
current->next = next;
head->next = current;
return true;
}
void print_list(struct list *head) {
while(head!=NULL) {
cout<<head->value<<" ";
head = head ->next;
}
cout<<endl;
}
int main() {
struct list *head = (struct list *)malloc(sizeof(struct list));
head->value = 3;
head->next = NULL;
insert_list(head,1);
insert_list(head,2);
print_list(head);
print_list(reverse_list(head));
system("pause");
}