c_cpp 92.反向链接清单II - 中 - 2018.7.31
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 92.反向链接清单II - 中 - 2018.7.31相关的知识,希望对你有一定的参考价值。
/**
1:寻找真正要逆向部分的链表,找寻起点和终点,断开 m & n 对应节点与链表的连接
2:对需要逆向的那部分链表进行处理
3:重新将完成逆向的部分连接到链表里
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (!head) return NULL;
ListNode *preNode = NULL;
ListNode *nextNode;
while (head->next != NULL) {
nextNode = head->next;
head->next = preNode;
preNode = head;
head = nextNode;
}
head->next = preNode;
return head;
}
ListNode* reverseBetween(ListNode* head, int m, int n) {
if (!head || m == n) return head;
ListNode *startReverseNode = head;
ListNode *startReversePreNode = NULL;
for (int i = 1; i < m; i++) {
if (i == m-1) startReversePreNode = startReverseNode;
startReverseNode = startReverseNode->next;
}
ListNode *anchorNode = startReverseNode;
for (int i = m; i < n; i++) {
anchorNode = anchorNode->next;
}
if (anchorNode->next != NULL) {
ListNode *tempNode = anchorNode->next;
anchorNode->next = NULL;
anchorNode = tempNode;
} else {
anchorNode = NULL;
}
ListNode *newStartNode = reverseList(startReverseNode);
startReverseNode->next = anchorNode;
if (startReversePreNode == NULL) {
return newStartNode;
}
startReversePreNode->next = newStartNode;
return head;
}
};
以上是关于c_cpp 92.反向链接清单II - 中 - 2018.7.31的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 206.反向链接清单 - 简单 - 2018.7.31
c_cpp 142.关联清单周期II-中 - 2018.7.30
java 92.反向链表II(#)。java
java 92.反向链表II(#)。java
java 92.反向链表II(#)。java
java 92.反向链表II(#)。java