zoukankan      html  css  js  c++  java
  • LeetCode Rotate List

     struct ListNode {
          int val;
          ListNode *next;
          ListNode(int x) : val(x), next(NULL) {}
      };
    
    class Solution {
    public:
    	ListNode* rotateRight(ListNode* head, int k)
    	{
    		int level = -1;
    		int size = 0;
    		ListNode *ptr = head;
    		while(ptr != nullptr) //一定要找到size,并取余,不然这个算法就是错的
    		{
    			size++;
    			ptr = ptr->next;
    		}
    		if(size == 0) return nullptr;
    		cout << k%size<<endl;
    		ListNode *newhead = findNewHead(head, k%size, level);
    		ptr = head;
    		while( ptr != nullptr)
    		{
    			if(ptr->next == newhead) ptr->next = nullptr; //要将新的头节点的前前节点设置为nullptr
    			ptr = ptr->next;
    		}
    		ptr = newhead;
    		while(ptr != nullptr && ptr->next != nullptr && ptr != head) // Error: 要找到最后一个,再连接到head
    			ptr = ptr->next;
    		if(ptr!= nullptr && ptr->next == nullptr && ptr != head) ptr->next = head;//Error:要判断ptr是不是head,不然容易产生环状
    		if(newhead == nullptr) newhead = head; //newhead返回nullptr时如何处理也非常关键
    		return newhead;
    	}
    	
    	ListNode* findNewHead(ListNode * node, int k, int& level)
    	{
    		ListNode* newhead = nullptr;
    		if(node == nullptr) {level = 0; return nullptr;}
    		if(level < 0)
    			newhead = findNewHead(node->next, k, level);
    		if(level == k)
    		{
    			return newhead; //哪条路径返回什么值也一定要搞清楚
    		}
    		if(level >= 0) level++;
    		return node; //哪条路径返回什么值也一定要搞清楚
    	}
    };
    
  • 相关阅读:
    eas之动态刷新Table
    eas之导入导出
    eas之事件
    eas之获得任何一个KDTable的选中行
    eas之创建一个UI界面并对其操作
    eas之style接口
    eas之指定虚模式
    eas之数据融合
    eas之kdtable格式化
    eas之视图冻结与解冻
  • 原文地址:https://www.cnblogs.com/whyandinside/p/5282039.html
Copyright © 2011-2022 走看看