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; //哪条路径返回什么值也一定要搞清楚
    	}
    };
    
  • 相关阅读:
    sql server 存储过程分隔split
    sql server 存储过程、事务,增删改
    jquery ajax 参数可以序列化
    Pycharm连接gitlab
    gitlab的搭建和linux客户端的连接
    jenkins的搭建和使用
    svn服务器及客户端安装使用
    python2 和python3共存下问题
    Codecademy For Python学习笔记
    类编写的细节
  • 原文地址:https://www.cnblogs.com/whyandinside/p/5282039.html
Copyright © 2011-2022 走看看