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

      

  • 相关阅读:
    如何实现EndNote中的PDF批量导出
    UltraEdit 编译输出中文乱码的解决办法
    史密斯(smith)圆图讲解
    OpenFlow
    网络虚拟化-简介
    java util包概述
    内存四区分析
    理解Java接口
    Ubuntu14.04安装wineqq国际版
    使用注解来构造IoC容器
  • 原文地址:https://www.cnblogs.com/carsonzhu/p/5202082.html
Copyright © 2011-2022 走看看