链表定义如下:
struct Node { struct Node* next; int data; };
非递归反置链表如下:
struct Node* ll_reverse(struct Node* head) { if(head==NULL) { return NULL; } else { struct Node* pre = NULL; struct Node* next = NULL; struct Node* ptr = head; while(ptr!=NULL) { next = ptr->next; ptr->next = pre; pre = ptr; ptr = next; } head->next = NULL; return pre; } }
递归反置如下:
struct Node* ll_reverse_rec(struct Node* head) { if(head==NULL || head->next==NULL) { return head; } else { struct Node* ptr = ll_reverse_rec(head->next); head->next->next = head; head->next = NULL; return ptr; } }
怎么感觉递归倒麻烦了呢……