zoukankan      html  css  js  c++  java
  • LeetCode OJ--Reverse Nodes in k-Group **

    http://oj.leetcode.com/problems/reverse-nodes-in-k-group/  链表  指针  

    对链表翻转的变形

    #include <iostream>
    using namespace std;
    
     struct ListNode {
         int val;
         ListNode *next;
         ListNode(int x) : val(x), next(NULL) {}
     };
    
     ListNode *reverse(ListNode * l2)
     {
         ListNode *n1,*n2,*before;
         n1 = l2;
         n2 = n1->next;
         before = NULL;
         while(n2)
         {
             n1->next = before;
             before = n1;
             n1 = n2;
             n2 = n2->next;
         }
         n1->next = before;
         return n1;
     }
    
    class Solution {
    public:
        ListNode *reverseKGroup(ListNode *head, int k) {
            if(k==1 || head == NULL)
                return head;
    
            ListNode *ans,*ansTail;
             
            bool firstTime = 1,flagContinue = 1;
            ListNode *seghead, *tempNode = head;
            while(flagContinue && tempNode)
            {
                seghead = tempNode = head;
                flagContinue = 0;
                int times = 0;
                while(tempNode)
                {
                    tempNode = tempNode->next;
                    times++;
                    if(times == k-1 && tempNode)
                    {
                        flagContinue = 1;
                        break;
                    }
                }
                //break up
                if(tempNode)
                {
                    head = tempNode->next;
                    tempNode->next = NULL;
                }
                
                if(flagContinue)
                {
                    seghead = reverse(seghead);
                }
                if(firstTime)
                {
                    ans = ansTail = seghead;
                    firstTime = false;
                }
                else
                    ansTail->next = seghead;
                while(ansTail->next)
                    ansTail = ansTail->next;
            }
            return ans;
        }
    };
    
    int main()
    {
        ListNode *n1 = new ListNode(1);
        ListNode *n2 = new ListNode(2);
        ListNode *n3 = new ListNode(3);
        ListNode *n4 = new ListNode(4);
        ListNode *n5 = new ListNode(5);
        n1->next = n2;
        n2->next = n3;
        n3->next = n4;
        n4->next = n5;
        ListNode *ans;
        Solution myS;
        ans = myS.reverseKGroup(NULL,6);
        return 0;
    }
  • 相关阅读:
    html语法规范
    html页面基本结构
    HTML头部结构详解
    文件路径中 / 和 ./ 和 ../的区别
    实体符号
    利用JS修改style属性和添加元素类名(important)
    Less
    Eureka自我保护计算
    Eureka元数据
    EurekaServer源码分析
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3519642.html
Copyright © 2011-2022 走看看