旋转链表

来源:互联网 发布:香港第一美女是谁知乎 编辑:程序博客网 时间:2024/05/16 17:30

题目

给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数
样例
给出链表1->2->3->4->5->null和k=2

返回4->5->1->2->3->null

解题

找到第k个结点
找到最好一个结点
最后一个结点链接到头结点
第k个结点后面断开

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    /**     * @param head: the List     * @param k: rotate to the right k places     * @return: the list after rotation     */    public ListNode rotateRight(ListNode head, int k) {        // write your code here        if(k<0)            return null;        if(k==0||head==null || head.next==null)            return head;        int size = size(head);        k = k%size;         k = size - k;        ListNode kNode = head;        while(k>1){ // 找到第 k个结点            k--;            kNode = kNode.next;        }        ListNode lastNode = kNode;        while(lastNode.next!=null){ // 找到最好一个结点            lastNode = lastNode.next;        }        lastNode.next = head; // 最后一个结点链接到头结点        ListNode newHead = kNode.next; // 新的头结点是 k + 1 结点         kNode.next =null; // 第k个结点后断开        return newHead;    }    public int size(ListNode head){        ListNode p = head;        int size = 0;        while(p!=null){            p = p.next;            size++;        }        return size;    }}
0 0
原创粉丝点击