zoukankan      html  css  js  c++  java
  • leetcode:Rotate List

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

    For example:
    Given 1->2->3->4->5->NULL and k = 2,
    return 4->5->1->2->3->NULL.

    分析:题意为将一个链表向右旋转k位。

    思路:此题同样可以利用双指针,第一个指针从头开始向后移动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 == NULL || k <= 0)
        return head;
      
      ListNode *temp = head;
      int count = 0;
      while(temp != NULL)
      {
        count++;
        temp = temp->next;
      }
      
      if(k > count)
         k = k%count;
      if(k == count || k == 0)
         return head;
      
      ListNode *first = head;
      while(k > 0)
      {
        first = first->next;
        k--;
      }
      
      ListNode *second = head;
      while(first->next != NULL)
      {
        first = first->next;
        second = second->next;
      }
    
      ListNode *newhead = second->next;
      first->next = head;
      second->next = NULL;
      return newhead;
    }
    
    };
    

      

  • 相关阅读:
    100个精彩的开源游戏
    poj 2104 K-th Number
    Redis源代码分析-内存数据结构intset
    android音乐播放器开发 SweetMusicPlayer 实现思路
    MySQL 二进制日志(Binary Log)
    Node.js 博客实例(六)留言功能
    HBase总结(十二)Java API 与HBase交互实例
    window+Apache 配置虚拟主机(2)
    Web Service那点事
    JSP基本语法
  • 原文地址:https://www.cnblogs.com/carsonzhu/p/5202082.html
Copyright © 2011-2022 走看看