整体思路:将链表指针的next改为pre,将指向后面的改为指向前面的。
即1→2→3→4→null改为null←1←2←3←4。
伪代码(双指针思路):
cur = head; pre = null; //初始化两个指针 while(cur) { temp = cur -> next; cur->next = pre; //开始将初始化的指针后移动 pre = cur; cur = temp; } return pre;
伪代码(递归思路):
cur = head; pre = null; reverse(cur,pre); node reverse(cur,pre) { if(cur = null) return pre; else { temp = cur->next; pre = cur; cur = cur->next; } }
代码:
#include<iostream> struct node{int value; node *next;}; using namespace std; node*create_list(int n);//双指针法 node* reverse_list(node* head);//递归法 node* reverse_list(node* head, node* pre); int main(void) { node* head; node* pre = NULL; head = create_list(10); cout << head->value << endl; node* head1 = reverse_list(head,pre); cout << head1->value << endl; return 0; } node *create_list(int n) { node *head = new node;//初始化 head->next = NULL; node *pre = head; cout << "请输入" << n << "个链表值" << endl; for(int i = 0; i < n; i++) { node * temp = new node; cin >> temp->value; pre -> next = temp; pre = temp; temp->next = NULL; } return head->next; } node* reverse_list(node* head) { node* cur = head; node* pre = NULL; while(cur) { node* temp = cur->next; cur->next = pre; pre = cur; cur = temp; } return pre; } node* reverse_list(node* head, node* pre) { node* cur = head; if (cur == NULL) return pre; else { node *temp = cur->next; pre = cur; cur = temp; reverse_list(cur, pre); } }