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;
    }
    
    };
    

      

  • 相关阅读:
    数值分析实验之数值积分法(java 代码)
    Python 数据处理
    Python 网络爬虫
    数据库系统开发——旅游公司机票查询及预订系统
    Python词云生成
    Python库的安装与查看
    Python词频统计
    Python程序设计训练
    Python编程基础训练
    如何在同一Linux服务器上创建多站点
  • 原文地址:https://www.cnblogs.com/carsonzhu/p/5202082.html
Copyright © 2011-2022 走看看