61. Rotate List
阿新 • • 發佈:2018-09-19
int rotate 一個 移動 image pub info null 拼接
一、題目
1、審題
2、分析
給出一個鏈表,一個參數 k,將鏈表的後邊 k 個節點移動到左邊來。(其中 k 可能大於鏈表長度)
二、解答
1、思路:
①、獲得鏈表長度 total ,同時記錄末尾節點 endNode。則 k = k % total 即為需要移動的後邊部分的節點數,則 leftStep = total - k 即為前邊不需要動的節點數。
②、將原鏈表第 leftStep+1 個節點成為新鏈表的頭結點,即 第 leftStep.next = null;
③、原末尾節點 endNode 拼接到原來的頭結點。
public ListNode rotateRight(ListNode head, intk) { if(head == null || head.next == null || k == 0) // 不需要移動 return head; int total = 1; ListNode endNode = head; while(endNode.next != null) { total++; endNode = endNode.next; // 記錄末尾一個節點 } k= k % total; if(k == 0) // 不需要移動 return head; int leftStep = total - k; ListNode tmpNode = head; for(int i = 1; i < leftStep; i++) tmpNode = tmpNode.next; ListNode newHead = tmpNode.next; tmpNode.next = null; //新的末尾節點 endNode.next = head; // 拼接 return newHead; }
61. Rotate List