zoukankan      html  css  js  c++  java
  • 【LeetCode】61. 旋转链表

    【题目描述】

    给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。

    示例 1:

    输入: 1->2->3->4->5->NULL, k = 2
    输出: 4->5->1->2->3->NULL
    解释:
    向右旋转 1 步: 5->1->2->3->4->NULL
    向右旋转 2 步: 4->5->1->2->3->NULL
    示例 2:

    输入: 0->1->2->NULL, k = 4
    输出: 2->0->1->NULL
    解释:
    向右旋转 1 步: 2->0->1->NULL
    向右旋转 2 步: 1->2->0->NULL
    向右旋转 3 步: 0->1->2->NULL
    向右旋转 4 步: 2->0->1->NULL

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/rotate-list

    【解题思路】

    1、先把原链表链成一个环形链表,将其表尾指向表头;

    2、找到旋转的起点作为新链表的表头;

    【提交代码】

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     struct ListNode *next;
     6  * };
     7  */
     8 
     9 struct ListNode* rotateRight(struct ListNode* head, int k)
    10 {
    11     int i;
    12     int n;
    13     int offset;
    14     struct ListNode *p;
    15 
    16     if( head == NULL || head->next == NULL )
    17         return head;
    18 
    19     p = head;
    20     n = 1;
    21     // p移到链表的尾巴,并且获取到链表的长度len
    22     while( p->next != NULL )
    23     {
    24         p = p->next;
    25         n++;
    26     }
    27     //printf("link list len: %d
    ", n);
    28 
    29     // 链表的尾巴指向head,形成一个环
    30     p->next = head;
    31 
    32     // 找到旋转的起点,需要从head开始移动多少步
    33     offset = n - ( k % n ) - 1;
    34     //printf("offset: %d
    ", offset);
    35 
    36     p = head;
    37     // p移动到新链表头的前一个节点
    38     for( i = 0; i < offset; i++ )
    39     {
    40         p = p->next;
    41     }
    42     // 新链表的表头
    43     head = p->next;
    44 
    45     p->next = NULL;
    46 
    47     return head;
    48 }
  • 相关阅读:
    Js实现页面跳转的几种方式
    android给View设置上下左右边框
    mac下安装tomcat
    Series.str方法
    loc() iloc() at() iat()函数
    sudo: pip:找不到命令
    杀死进程方法
    unique()与nunique()
    object数据类型
    set_index()与reset_index()函数
  • 原文地址:https://www.cnblogs.com/utank/p/13278324.html
Copyright © 2011-2022 走看看