zoukankan      html  css  js  c++  java
  • 【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 };
  • 相关阅读:
    uva 816
    SQL语言类
    VTK中国文字显示和简单的医疗图像浏览软件
    系统开始了解--感兴趣的文章
    的天数,以一个日期与当前日期的
    POJ 2528 QAQ段树+分离
    IT该忍者神龟Instant client required
    进程和线程之间的通信
    2014——我的求职(两)
    如何绕过chrome的弹窗拦截机制
  • 原文地址:https://www.cnblogs.com/Asumi/p/12514368.html
Copyright © 2011-2022 走看看