一、思路:
先实现两个节点翻转,再实现k个节点翻转,最后实现一组一组翻转
二、C++代码:
class Solution {
public:
ListNode* swap(ListNode *f1, ListNode *f2, int count) {
ListNode *nowNode = f2;
ListNode *f3, *l1, *l2 = NULL, *l3;
while (--count > 0) {
if (nowNode->next == NULL) //表明链表不足k位
return NULL;
else if (count == 1) {
l2 = nowNode->next;
l1 = nowNode;
l3 = l2->next;
f3 = f2->next;
f2->next = l3;
if (l1 == f2)
l2->next = f2;
else {
l1->next = f2;
l2->next = f3;
}
if (f1 != NULL)
f1->next = l2;
return l2;
}
nowNode = nowNode->next;
}
return l2;
}
ListNode *swapKNodes(ListNode *f1, ListNode *f2, int k) {
ListNode *nowNode = NULL;
ListNode *parent = f2;
for (int i = k; i > 1; i -= 2) {
if (i == k) {
f2 = swap(f1, f2, i);
nowNode = f2;
}
else {
nowNode->next = swap(nowNode, nowNode->next, i);
nowNode = no

该博客主要介绍了如何使用C++解决LeetCode第25题,即如何对链表进行K个节点一组的翻转。博主首先解析了解题思路,强调了先翻转两个节点,然后逐步扩展到K个节点的翻转方法,接着提供了完整的C++代码实现。

1058

被折叠的 条评论
为什么被折叠?



