• 【Leetcode】K 个一组翻转链表


    题目链接:K 个一组翻转链表


    题意:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。

    如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

    给你这个链表:1->2->3->4->5

    当 k = 2 时,应当返回: 2->1->4->3->5

    当 k = 3 时,应当返回: 3->2->1->4->5

    题解:先统计一下链表的长度,k个一组,分成n/k组,然后每组翻转k-1次。

    翻转的过程如图所示。画图真的对做链表题很管用啊。QAQ

    也是做完这个操作以后,再更新一下cur和pre即可。 


    代码:

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* reverseKGroup(ListNode* head, int k) {
    12         ListNode* ans = new ListNode(0);
    13         ListNode* pre = ans;
    14         ListNode* cur = head;
    15         ListNode* tail =ans;
    16         
    17         ans->next = head;
    18         //统计链表长度
    19         int len = 0;
    20         while(head){
    21             head = head->next;
    22             len++;
    23         }
    24         
    25         //k个一组
    26         for(int i = 0 ; i < len/k ; i++){
    27             for(int j = 1; j <= k-1 ;j++){  //翻转k-1次
    28                tail = cur->next;
    29                
    30                cur->next = tail->next;
    31                tail->next = pre->next;
    32                pre->next = tail;
    33             }
    34             pre = cur;
    35             cur = pre->next;
    36         }
    37 
    38         return ans->next;
    39     }
    40 };
  • 相关阅读:
    ORBSLAM2的资源
    工程思想
    Linux中PATH、 LIBRARY_PATH、 LD_LIBRARY_PATH和ROS_PACKAGE_PATH
    CMkeList文件编写
    SLAM资料
    windows下隐藏文件夹
    Ubuntu16装Flash
    知识管理
    学习纲领
    lsof详解
  • 原文地址:https://www.cnblogs.com/Asumi/p/12514368.html
Copyright © 2020-2023  润新知