zoukankan      html  css  js  c++  java
  • Reverse Nodes in k-Group

    题目:

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.You may not alter the values in the nodes, only nodes itself may be changed.Only constant memory is allowed.

    For example,Given this linked list: 1->2->3->4->5

    For k = 2, you should return: 2->1->4->3->5

    For k = 3, you should return: 3->2->1->4->5

    思路:

    在一开始增加额外的额节点,编写一个转换k个节点的函数,每次转换k个。注意转换函数中,由头到尾转换时候pEnd以及pHead顺序的变换。

    代码:

    class Solution {
    //https://leetcode.com/problems/reverse-nodes-in-k-group/
    public:
        ListNode* reverseKGroup(ListNode* head, int k) {
            if(k<=0||head==NULL)    return head;
            
            ListNode *dummy=new ListNode(0);dummy->next=head;
            ListNode *p=dummy;
            
            while(p){
                p->next=reverseList(p->next,k);
                for(int i=1;p&&i<=k;i++){
                    p=p->next;
                }
            }
            return dummy->next;
        }
        
        ListNode* reverseList(ListNode* head,int k){
            if(k<=0)    return head;
            ListNode* pEnd=head; 
            while(pEnd&&k){
                pEnd=pEnd->next;
                k--;
            }
            if(k>0) return head;
            ListNode *pHead=pEnd,*p=head;
            while(p!=pEnd){
                ListNode *q=p->next;//有一个好处就是pHead指向空的,自动的了,不想之前需要考虑这个问题,直接从头部指向最后一个
                p->next=pHead;
                pHead=p;
                p=q;//从后面往前
            }
            return pHead;//连续,后面不断开
        }
    };


  • 相关阅读:
    1.常用命令
    虚拟机共享文件夹
    Docker安装 和简单使用
    js方法名通过参数传递调用实例
    highcharts参数说明
    绘制HightCharts饼状图
    附加数据库失败,操作系统错误 5:”5(拒绝访问。)”的解决办法
    ckeditor相关使用
    针对MySQL提高百万条数据的查询速度优化
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519823.html
Copyright © 2011-2022 走看看