美文网首页
61. Rotate List

61. Rotate List

作者: evil_ice | 来源:发表于2016-12-27 20:24 被阅读25次

    题目61. 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.

    1
    思路:k的值可能大于链表的长度
    若0<= k <=len,则可以使用快慢指针更高效,
    类似[19. Remove Nth Node From End of List])
    
    public class Solution {
        public ListNode rotateRight(ListNode head, int k) {
            if(head == null || k == 0){
                return head;
            }
           
            ListNode node = head;
            int nodeNum = 0;
            
            while(node != null){
                nodeNum++;
                node = node.next;
            }
            
            k %= nodeNum;
            if(k == 0){
                return head;
            }
           
            int secondSectionNum = nodeNum - k;
            ListNode secondTail = head;
            for(int i=1; i<secondSectionNum; i++){
                secondTail = secondTail.next;
            }
            
            ListNode firstSectionHead = secondTail.next;
            ListNode firstSectionTail = firstSectionHead;
            while(firstSectionTail.next != null){
                firstSectionTail = firstSectionTail.next;
            }
            
            secondTail.next = null;
            firstSectionTail.next = head;
            return firstSectionHead;
        }
    }
    

    相关文章

      网友评论

          本文标题:61. Rotate List

          本文链接:https://www.haomeiwen.com/subject/pduevttx.html