这里我们让current始终指向每次被反转后的节点中的最后一个,temp始终指向被反转的节点,因此current的next节点就是要被反转的节点,即temp。
#include<iostream> using namespace std; struct ListNode{ int data; ListNode *next; }; ListNode* Create_Linklist(int *arr,int len) { ListNode* head = new ListNode(); head->next = NULL; ListNode* L = head; for (int i = 0; i < len; i++) { ListNode* newn = new ListNode(); newn->data = arr[i]; newn->next = NULL; L->next = newn; L = L->next; } return head; } void Reverse_LinkList(ListNode* &head) { if ( head && head->next ) { ListNode* current = head->next; //current始终指向每次被反转后的节点中的最后一个,因此current的next节点就是要被反转的节点,即tamp ListNode* temp; //temp始终指向被反转的节点,因此 temp 等于 current->next while (current->next) { temp = current->next; current->next = temp->next; temp->next = head->next; head->next = temp; } } } void Print_LinkList(ListNode* &head) { if (head) { ListNode* L = head; L = L->next; while (L) { cout << L->data; L = L->next; } } } void main(int argc, char *argv[]) { int arr1[] = { 1, 3, 5, 7 }; ListNode* head = Create_Linklist(arr1, sizeof(arr1) / sizeof(int)); Reverse_LinkList(head); Print_LinkList(head); }