61. 旋转链表

题目

61. 旋转链表

题解


代码:

public class code61 {

    public static ListNode rotateRight(ListNode head, int k) {
        // base cases
        if (head == null) {
            return null;
        }
        if (head.next == null) {
            return head;
        }

        // close the linked list into the ring
        ListNode old_tail = head;
        int n;
        for (n = 1; old_tail.next != null; n++) {
            old_tail = old_tail.next;
        }
        old_tail.next = head;

        // find new tail : (n - k % n - 1)th node
        // and new head : (n - k % n)th node
        ListNode new_tail = head;
        for (int i = 0; i < n - k % n - 1; i++) {
            new_tail = new_tail.next;
        }
        ListNode new_head = new_tail.next;

        // break the ring
        new_tail.next = null;

        return new_head;
    }

    public static ListNode createList_1() {
        ListNode head = new ListNode(1);
        ListNode cur = head;
        for (int i = 2; i <= 5; i++) {
            cur.next = new ListNode(i);
            cur = cur.next;
        }
        cur.next = null;
        return head;
    }

    public static ListNode createList_2() {
        ListNode head = new ListNode(0);
        ListNode cur = head;
        for (int i = 1; i <= 2; i++) {
            cur.next = new ListNode(i);
            cur = cur.next;
        }
        cur.next = null;
        return head;
    }

    public static void print(ListNode node) {
        if (node == null) {
            return;
        }
        ListNode current = node;
        while (current != null) {
            System.out.print(current.val + " -> ");
            current = current.next;
        }
        System.out.println("NULL");
    }

    public static void main(String[] args) {
        ListNode head_1 = createList_1();
        print(head_1);
        int k_1 = 2;
        ListNode res_1 = rotateRight(head_1, k_1);
        print(res_1);

        System.out.println();

        ListNode head_2 = createList_2();
        print(head_2);
        int k_2 = 4;
        ListNode res_2 = rotateRight(head_2, k_2);
        print(res_2);
    }

}

参考:

  1. 旋转链表——题解一
  2. Leetcode 61:旋转链表(最详细解决方案!!!)——题解二
  3. Rotate List (旋转链表,切断)——题解三
全部评论

相关推荐

05-22 12:44
已编辑
门头沟学院 golang
点赞 评论 收藏
分享
_mos_:我以为手抄报简历就已经很顶了,没想到还有表格简历
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 16:15
你知道对于一个平常不接电话,从来不发语音,只打字交流的人来说电话面有多恐怖吗....刚刚亲眼目睹了舍友电话面...她甚至还在吃饭...就这么水灵灵的打过来开始问了...感觉如果是面对面我真的会紧张到跪下来给面试官磕一个...
一只ikun:额,其实没那么恐怖,最难迈开的是第一步,相信我,你面完第一次后面就不怕了。第一次面试我还想着找个自习室面试,到后面我打着游戏突然来电话我就直接面试了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务