整体思路:将链表指针的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);} }