[LeetCode] Reverse Linked List II

来源:互联网 发布:国内旅游 知乎 编辑:程序博客网 时间:2024/06/08 18:02
ListNode *reverseBetween(ListNode *head, int m, int n) {ListNode* tmpNode = new ListNode(0);tmpNode->next = head;ListNode *pLeft = NULL, *pRight = NULL, *pBeg = NULL, *pEnd = NULL;ListNode* ptr = tmpNode;int pos = 0;while(pos <= n+1){if(pos == m-1){pLeft = ptr;}else if(pos == m){pBeg = ptr;}if(pos == n){pEnd = ptr;}else if(pos == n+1){pRight = ptr;break;}ptr = ptr->next;pos++;}pEnd->next = NULL;ListNode *p1 = pBeg, *p2 = pBeg->next, *pTmp = pBeg;while(p2 != NULL){p1->next = p2->next;p2->next = pTmp;pTmp = p2;p2 = p1->next;}pLeft->next = pEnd;pBeg->next = pRight;head = tmpNode->next;delete []tmpNode;return head;}

先确定子链表的首尾以及前后接口,翻转子链表后,再与前后接口重新拼接上。

0 0