• leetcode之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.

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

    尤其是测试的时候考虑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;
    	}
    
  • 相关阅读:
    模板合集
    1201: 众数问题
    112. 路径总和
    Hibernate的配置及CURD
    5. 最长回文子串
    1120: 最值交换
    1119: 一维数组排序
    1118: 数列有序
    1117: 查找数组元素
    1116: 删除元素
  • 原文地址:https://www.cnblogs.com/gracyandjohn/p/4437622.html
Copyright © 2020-2023  润新知