leetcode--Rotate List

本文介绍了一种链表右旋算法,即给定一个链表,将其向右旋转k个位置,其中k是非负数。例如,对于链表1->2->3->4->5->NULL和k=2,返回4->5->1->2->3->NULL。文章详细解释了算法的实现过程,包括计算链表长度、确定实际旋转次数以及调整链表指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
 *         next = null;
 *     }
 * }
 */

public class Solution {
    /**
	 * The problem is to find the n-th nodes from end of the list.<br>
	 * Notice that the number n may be greater than the length of the list.<br>
	 * If this happen, we let n = n % length of the list.<br>
	 * 
	 * @param head --The head node of the input list
	 * @param n --An integer. 
	 * @return head of the rotated list.
	 * @author Averill Zheng
	 * @version 2014-06-03
	 * @since JDK 1.7
	 */
	public ListNode rotateRight(ListNode head, int n) {
		ListNode newHead = null;
		//calculate the length of the list
		if(head != null){
			int length = 0;
			ListNode currentNode = head;
			while(currentNode != null){
				++length;
				currentNode = currentNode.next;
			}
			n = (n < length) ?  n :  n % length;
			if(n > 0){
				currentNode = head;
				ListNode tail = null;
				for(int i = 0; i < length - n; ++i){
					tail = currentNode;
					currentNode = currentNode.next;
				}
				newHead = currentNode;
				while(currentNode.next != null)
					currentNode = currentNode.next;			
				currentNode.next = head;
				tail.next = null;
			}
			else
				newHead = head;
		}
		return newHead;
    }
}

  

转载于:https://www.cnblogs.com/averillzheng/p/3769119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值