📅  最后修改于: 2023-12-03 15:11:15.937000             🧑  作者: Mango
本文介绍如何使用 C++ 编写代码,反转单链表中的备用 K 节点。以下是具体实现:
使用三指针遍历链表,依次更改节点指向。步骤如下:
#include <iostream>
using namespace std;
// 定义单链表节点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* reverseK(ListNode* head, int k) {
if (head == NULL || k < 2) {
return head;
}
ListNode* pre = NULL; // 前置节点
ListNode* cur = head; // 当前节点
ListNode* next = NULL; // 下一个节点
ListNode* begin = NULL; // 从第 K 个节点开始反转
int count = 1;
while (cur != NULL) {
next = cur->next;
// 第 K 个节点的前置节点
if (count == k) {
begin = pre == NULL ? head : pre->next;
head = pre == NULL ? cur : head;
}
// 反转节点
if (count >= k) {
cur->next = pre;
}
pre = cur;
cur = next;
count++;
// 反转完成
if (count == k + 1) {
if (pre == NULL) {
head = begin;
}
else {
pre = begin;
}
begin->next = cur;
begin = NULL;
count = 1;
}
}
return head;
}
};
int main() {
Solution s;
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
head->next->next->next->next = new ListNode(5);
int k = 3;
head = s.reverseK(head, k);
while (head != NULL) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
return 0;
}
本文介绍了使用 C++ 编写反转单链表中备用 K 节点的程序。通过遍历链表,依次更改节点指向。本文提供的代码仅供参考,读者可以根据自己的实际情况对代码进行修改和扩展。