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,
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.
思路:题目非常清晰。思路是先得到链表长度。再从头開始直到特定点,開始变换连接就可以。
代码例如以下:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode rotateRight(ListNode head, int k) { if(k == 0 || head == null) return head; int len = 0; ListNode first = head;//头结点 ListNode last = null;//尾节点 while(head != null){ len++;//求长度 last = head;//最后一个节点 head = head.next;//循环条件 } k = k%len;//假设k>len,取余数 int n = 0; head = first;//标记到头结点 while(head!= null){ if(++n == (len - k))//推断是否到达位置 break; head = head.next; } //下面为交换位置 last.next = first; first = head.next; head.next = null; return first; } }/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode rotateRight(ListNode head, int k) { if(k == 0 || head == null) return head; int len = 0; ListNode first = head;//头结点 ListNode last = null;//尾节点 while(head != null){ len++;//求长度 last = head;//最后一个节点 head = head.next;//循环条件 } k = k%len;//假设k>len,取余数 int n = 0; head = first;//标记到头结点 while(head!= null){ if(++n == (len - k))//推断是否到达位置 break; head = head.next; } //下面为交换位置 last.next = first; first = head.next; head.next = null; return first; } }