leetcode 之Rotate List(18)

Posted 牧马人夏峥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 之Rotate List(18)相关的知识,希望对你有一定的参考价值。

      这题我的第一想法是用头插法,但实际上并不好做,因为每次都需要遍历最后一个。更简单的做法是将其连成环,找到相应的位置重新设头结点和尾结点。这过

有很多细节需要注意,比如K有可能是大于链表长度的,如何重新设置K等都要注意。

     

 ListNode *rotateList(ListNode *head, int k)
      {
          if (head == nullptr || k == 0)return head;

          ListNode *p = head;
          int n = 1;
          while (p->next)
          {
              n++;
              p = p->next;
          }

          k =n - k%n;//k有可能大于n
          p->next = head;
          for (int i = 0; i < k; i++)
              p = p->next;

          head = p->next;
          p->next = nullptr;

          return head;
      }
View Code

 

以上是关于leetcode 之Rotate List(18)的主要内容,如果未能解决你的问题,请参考以下文章

Rotate List

#Leetcode# 61. Rotate List

0061. Rotate List (M)

Rotate List

LeetCode Rotate List

LeetCode OJ 61. Rotate List 考虑边界条件