zoukankan      html  css  js  c++  java
  • leetCode 61.Rotate List (旋转链表) 解题思路和方法

    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.


    思路:题目非常清晰。思路是先得到链表长度。再从头開始直到特定点,開始变换连接就可以。

    代码例如以下:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode rotateRight(ListNode head, int k) {
            if(k == 0 || head == null)
                return head;
            int len = 0;
            ListNode first = head;//头结点
            ListNode last = null;//尾节点
            while(head != null){
                len++;//求长度
                last = head;//最后一个节点
                head = head.next;//循环条件
            }
            
            k = k%len;//假设k>len,取余数
            int n = 0;
            head = first;//标记到头结点
            while(head!= null){
                if(++n == (len - k))//推断是否到达位置
                    break;
                head = head.next;
            }
            //下面为交换位置
            last.next = first;
            first = head.next;
            head.next = null;
            return first;
        }
    }/**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode rotateRight(ListNode head, int k) {
            if(k == 0 || head == null)
                return head;
            int len = 0;
            ListNode first = head;//头结点
            ListNode last = null;//尾节点
            while(head != null){
                len++;//求长度
                last = head;//最后一个节点
                head = head.next;//循环条件
            }
            
            k = k%len;//假设k>len,取余数
            int n = 0;
            head = first;//标记到头结点
            while(head!= null){
                if(++n == (len - k))//推断是否到达位置
                    break;
                head = head.next;
            }
            //下面为交换位置
            last.next = first;
            first = head.next;
            head.next = null;
            return first;
        }
    }


  • 相关阅读:
    二叉排序树
    #define使用方法
    typedef函数指针使用方法
    ORACLE触发器具体解释
    C++第11周(春)项目2
    建立人际信任的方法
    Error creating bean with name 'menuController': Injection of autowired dependency……
    strtok和strtok_r
    session销毁
    嵌入式相关5
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7244571.html
Copyright © 2011-2022 走看看