码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode之Rotate List

时间:2015-04-18 17:21:21      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

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.

这道题其实思路很简单就是好多细节考虑不到导致编译好几次才成功

尤其是测试的时候考虑K是整个链表长度的整数倍的时候应该怎么处理

看到这道题我的思路首先是利用一次遍历求链表中倒数第K个节点,然后记录倒数第K+1个节点,然后再指针变化就可以了

但是出错!原因是如果K正好是head,这时候K之前的那个节点没法处理

下面附上代码:

public ListNode rotateRight(ListNode head, int k) {
        if (head == null) {
			return null;
		}
       ListNode temp = head;
		int len = 0;
		while(temp!=null){
			temp = temp.next;
			len++;
		}
		k = k%len;
		
		if (head.next == null || k == 0) {
			return head;
		}
		ListNode pointer = FindKToTail(head, k);
		
		if (pointer != null && pointer.next != null) {
			ListNode pointer1 = pointer.next;
			ListNode result = pointer1;
			pointer.next = null;
			while (pointer1.next != null) {
				pointer1 = pointer1.next;
			}
			pointer1.next = head;
			return result;
		} else {
			return null;
		}

	}

	public ListNode FindKToTail(ListNode head, int k) {
		if (head == null || k == 0) {
			return null;
		}
		ListNode fast = head;
		for (int i = 0; i < k; i++) {
			if (fast.next != null) {
				fast = fast.next;
			} else {
				return head;
			}
		}
		ListNode slow = head;
		
		while (fast.next != null) {
			fast = fast.next;
			
			slow = slow.next;
		}
		return slow;
	}

 

leetcode之Rotate List

标签:

原文地址:http://www.cnblogs.com/gracyandjohn/p/4437622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!