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,
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; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 18:35:04