1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| object LinkedListMove { def main(args: Array[String]): Unit = { println( rotateRight(ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, null))))), 0) ) println( rotateRight(ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, null))))), 1) ) println( rotateRight(ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, null))))), 2) ) println( rotateRight(ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, null))))), 3) ) println( rotateRight(ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, null))))), 4) ) println( rotateRight(ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, null))))), 5) ) println( rotateRight(ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, null))))), 6) ) }
def length(node: ListNode): Int = { var head = node var len = 0 while (head != null) { len += 1 head = head.next } len }
def rotateRight(node: ListNode, k: Int): ListNode = { if (k == 0) return node if (node == null) return null if (node.next == null) return node val len = length(node) var newk = k % len if (newk == 0) return node
newk = len - newk val start = node var newHead = node
for (i <- 0 until newk - 1) { newHead = newHead.next }
var t = newHead.next newHead.next = null newHead = t while (t.next != null) { t = t.next }
t.next = start newHead }
case class ListNode(x: Int, var next: ListNode)
}
|