C++程序 用于在给定大小的组中翻转链表–第2部分

C++程序 用于在给定大小的组中翻转链表–第2部分

上一集中,我们介绍了如何在C++中翻转给定链表。这一集中,我们将介绍如何在给定大小的组中翻转链表。

假设我们有一个大小为k的整数,代表需要翻转的链表中的节点数。我们的任务是对给定的链表进行k个节点的翻转,如果节点数少于k个,则不翻转最后的节点。

让我们看看C++代码如何实现这个任务:

#include<iostream>
using namespace std;
struct node{
    int value;
    node* next;
};
node* reverseList(node* head, int k){
    node *pre=head, *cur=head;
    for(int i=0; i<k; i++){ //判断节点数是否足够
        if(cur==NULL){
            return head;
        }
        cur=cur->next;
    }
    cur=head;
    node* next=NULL;
    for(int i=0; i<k; i++){ //翻转前k个节点
        next=cur->next;
        cur->next=pre;
        pre=cur;
        cur=next;
    }
    head->next=reverseList(cur, k); //递归翻转后面的节点
    return pre;
}
void printList(node* head){
    while(head!=NULL){
        cout<<head->value<<" ";
        head=head->next;
    }
    cout<<endl;
}
int main(){
    node* head=new node;
    head->value=1;
    node* cur=head;
    for(int i=2; i<10; i++){
        node* tmp=new node;
        tmp->value=i;
        cur->next=tmp;
        cur=tmp;
    }
    cout<<"Original list: ";
    printList(head);
    head=reverseList(head, 3);
    cout<<"After reversal: ";
    printList(head);
    return 0;
}

在上面的代码中,我们通过循环判断是否存在足够的节点进行翻转。然后我们按顺序遍历前k个节点并进行翻转。接下来,我们通过递归对后面的元素进行翻转。

以下是示例输出:

Original list: 1 2 3 4 5 6 7 8 9 
After reversal: 3 2 1 6 5 4 9 8 7 

我们可以看到,原始列表是1,2,3,4,5,6,7,8,9。以大小3为组的翻转后,我们得到了3,2,1,6,5,4,9,8,7。

结论

通过上面的示例,我们已经学习了如何在给定大小的组中翻转链表。在本文中,我们使用C++编写了代码进行反转,并演示了如何递归反转给定列表中的剩余节点。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例