Reverse Linked List & Reverse Linked List II
思路:这里利用prev=head实现链表的reverse
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *prev = nullptr; ListNode * tmp = nullptr; while(head != nullptr) { tmp = head->next; head->next = prev; prev = head; head = tmp; } return prev; } };
Reverse Linked List II
思路:使用头插法,特别注意连接的先后顺序
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseBetween(ListNode* head, int m, int n) { ListNode dummy(-1); dummy.next = head; ListNode *prev = &dummy; for(int i=1; i<m; ++i) prev = prev->next; ListNode *head1 = prev; prev = prev->next; ListNode *cur = prev->next; for(int i=m; i<n; ++i) { prev->next = cur->next; cur->next = head1->next; head1->next = cur; cur = prev->next; } return dummy.next; } };

浙公网安备 33010602011771号