zoukankan      html  css  js  c++  java
  • LeetCode 25

    一、问题描述

    Description:

    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.

    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

    Note:

    You may not alter the values in the nodes, only nodes itself may be changed.

    Only constant memory is allowed.

    给一个链表,每 k 个结点为一组进行逆转,返回逆转后的链表。

    若最后剩下的不足 k 个结点,则不需要逆转。

    注意:

    1. 只能操作结点,不能操作值域。
    2. 只能使用常量的空间。


    二、解题报告

    本题是《LeetCode 24 - Swap Nodes in Pairs》的扩展,每 k 个结点为一组,采用“头插法”进行逆转。

    直接上代码:

    class Solution {
    public:
         ListNode* reverseKGroup(ListNode* head, int k) {
             if(head == NULL)
                 return NULL;
             if(k==1) return head;
             ListNode* start = head;
             ListNode* end = head;
             ListNode* p = new ListNode(0);  // 头指针
             ListNode* new_head = p;
             while(true) {
                int i;
                for(i=0; i<k; ++i) {         // 向前移动k步
                    if(end!=NULL)
                        end = end->next;
                    else
                        break;
                }
                if(i <= k-1)                 // 不足k个,退出循环
                    break;
                ListNode* q = start;         // 暂存start结点
                while(start!=end) {          // 采用"头插法"进行逆转
                    ListNode* temp = start;
                    start = start->next;
                    temp->next = p->next;
                    p->next = temp;
                }
                p = q;                       // 逆转后第一个结点在末尾,p指向末尾
                start = end;
             }
             p->next = start;
             return new_head->next;
         }
    };





    LeetCode答案源代码:https://github.com/SongLee24/LeetCode


  • 相关阅读:
    ADO 缓存更新
    DBNavigator中把insert变为append
    JQuery 选择器
    VS2013默认打开HTML文件没有设计视图
    windows 关机 重启 命令
    java如何计算两个日期之间相差多少天?
    java的list集合操作List<T>转化List<Long>
    ExcelUtil工具类
    oracle的START WITH CONNECT BY PRIOR用法
    oracle的with as用法
  • 原文地址:https://www.cnblogs.com/songlee/p/5738041.html
Copyright © 2011-2022 走看看