leetCode練習(61)
阿新 • • 發佈:2019-01-02
題目:Rotate List
難度:medium
問題描述:
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
.
Subscribe to see which companies asked this question
解題思路: 先找到len,然後tail與head相連,再在正確的地方斷開。難點在於怎麼找到斷開的地方。一是從tail再次走len-k%len步,而是在最開始的找到tail時,就將整個連結串列用ArrayList存起來,再直接提出斷點。第二個辦法是明顯的空間換時間~ 方法一程式碼如下:方法二程式碼如下:public class ListNode{ int val; ListNode next; ListNode(int x){ val=x; } } public ListNode rotateRight(ListNode head, int k) { if(head==null){ return head; } ListNode temp=head; int len=1; while(temp.next!=null){ temp=temp.next; len++; } temp.next=head; k=k%len; for(int i=0;i<len-k-1;i++){ head=head.next; } temp=head; head=head.next; temp.next=null; return head; }
public ListNode rotateRight3(ListNode head, int k) { if(head==null){ return head; } ListNode tail=head; int len=1; ArrayList<ListNode> list=new ArrayList<>(); while(tail.next!=null){ list.add(tail); tail=tail.next; len++; } list.add(tail); tail.next=head; k=k%len; k=len-k-1; System.out.println("k="+k); tail=list.get(k); head=tail.next; tail.next=null; return head; }