LeetCode -- Rotate List

来源:互联网 发布:淘宝上的轮毂能买吗 编辑:程序博客网 时间:2024/05/22 10:47
题目描述:


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个节点放在链表前。


思路:
1. 遍历链表判断长度len是否小于k,如果是,则k = k % len
2. 如果len = k或len < 2或k < 1,直接返回
3. 遍历链表,移动len - k - 1个位置,存当前位置为q
4. 将q之后的节点存入stack
5. 遍历stack,依次将节点设为头结点
6. 最后,将q.next指向Null


实现代码:

/** * Definition for singly-linked list. * public class ListNode { *     public int val; *     public ListNode next; *     public ListNode(int x) { val = x; } * } */public class Solution {    public ListNode RotateRight(ListNode head, int k)     {        if(head == null){    return null;    }        var len = LenOf(head);    if(len < 2 || k == len || k < 1){    return head;    }    if(k > len){    k = k % len;    }        var stack = new Stack<int>();    var p = head;        for(var i = 0;i < len - k - 1;i ++){    p = p.next;    }        var q = p;        p = p.next;    while(p != null){    stack.Push(p.val);    p = p.next;    }    q.next = null;        while(stack.Count > 0)    {    var n = new ListNode(stack.Pop());    n.next = head;    head = n;    }        return head;    }private int LenOf(ListNode head){var p = head;var len = 0;while(p != null){len ++;p = p.next;}return len;}}


0 0