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