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


  • 相关阅读:
    xml解析模块
    python面向对象基础
    python hashlib模块
    os和sys模块
    python反射
    正则表达式re模块
    踩的python列表及for循环一个坑儿
    python序列化模块json和pickle
    python时间模块-time和datetime
    64匹马、8赛道,至少多少轮比赛找出速度最快的4匹马?
  • 原文地址:https://www.cnblogs.com/songlee/p/5738041.html
Copyright © 2011-2022 走看看