zoukankan      html  css  js  c++  java
  • rotate-list 旋转部分链表

    Given a list, rotate the list to the right by k places, where k is non-negative.

    For example:
    Given1->2->3->4->5->NULLand k =2,
    return4->5->1->2->3->NULL.

    题目;给定一个链表,将链表旋转到右边的k个位置,其中k是非负的。
    例如:
    1->2->3->4->5->NULL,为K = 2,
    返还4->5->1->2->3->NULL。
     
    分析:先遍历一遍,得出链表长度len,注意k可能会大于len,因此k%=len。
    将尾结点next指针指向首节点,形成一个环,接着往后跑len-k步,从这里断开,就是结果
     
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode *rotateRight(ListNode *head, int k) {
            if(head==nullptr||k==0)
                return head;
            int len=1;
            ListNode *p=head;
            while(p->next){
                //遍历一遍,求出链表长度
                len++;
                p=p->next;
            }
            k=len-k%len;
             
            p->next=head;//首尾相连
            for(int step=0;step<k;step++){
                p=p->next;//接着往后跑
            }
            head=p->next;//新的首节点
            p->next=nullptr;//断开环
            return head;
        }
    };
  • 相关阅读:
    jQuery
    jQuery
    jQuery
    jQuery
    jQuery
    JavaScript DOM 编程艺术
    JavaScript DOM 编程艺术
    JavaScript DOM 编程艺术
    【免费】Linux命令行与Shell脚本编程大全 第3版 PDF全本 21MB 百度网盘下载
    可重入函数(转载)
  • 原文地址:https://www.cnblogs.com/zl1991/p/9638057.html
Copyright © 2011-2022 走看看