Leetcode-rotate-list

题目描述


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

For example:
Given1->2->3->4->5->NULLand k =2,

return4->5->1->2->3->NULL.

我的想法是找到要倒置的第一个元素位置,然后再由末尾元素指向head。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode rotateRight(ListNode head, int n) {
        if(head == null || head.next == null)
            return head;
        ListNode cur = head;
        int count = 1;
        while(cur.next != null) {
            cur = cur.next;
            count++;
        }
        ListNode p = head;
        ListNode pre = new ListNode(0);
        pre.next = p;
        int s = count - n;
        while(s != 0){
            p = p.next;
            pre = pre.next;
            s--;
        }
        cur.next = head;
        pre.next = null;
        
        return p;  
        
    }
}

运行是如下结果:

查看别人通过的代码:

public class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if(head==null||k==0)
            return head;
        int len = 0;
        ListNode cur = head;
        ListNode last = null;
        while(cur!=null){
            len++;
            last = cur;
            cur = cur.next;
        }
        if(k>=len&&len!=0)
            k %= len;
        if(k==0)
            return head;
        last.next = head;//形成环路
        cur = head;//因为是右移动,所以从头开始遍历到倒数第k个元素
        for(int i = 1;i<=len-k;i++){
            last = cur;
            cur = cur.next;
        }
        //cur是头
        last.next = null;
        return cur;
    }
}

好像没啥区别。。。
发布了120 篇原创文章 · 获赞 25 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/yearningseeker/article/details/52204693