此问题看似简单,实际很麻烦,如果不使用二级指针,那么如果链表仅有两项,并且要求m=1,n=2,那么我们无从存储PRev,还要考虑多种情况。使用二级指针可以简化:
class Solution {public: ListNode* reverseBetween(ListNode* head, int m, int n) { if(head == NULL || m == n) return head; ListNode** pp = &head; for(int i=1; i<m; ++i) pp = &((*pp)->next); ListNode* end = *pp; ListNode* prev = NULL; for(int i=m; i<=n; ++i){ ListNode* cur = (*pp); (*pp) = (*pp)->next; cur->next = prev; prev = cur; } end->next = *pp; *pp = prev; return head; }};新闻热点
疑难解答