zoukankan      html  css  js  c++  java
  • Reverse Linked List II

    题目:Reverse a linked list from position m to n. Do it in-place and in one-pass.

    For example:
    Given 1->2->3->4->5->NULLm = 2 and n = 4,

    return 1->4->3->2->5->NULL.

    Note:
    Given mn satisfy the following condition:
    1 ≤ m ≤ n ≤ length of list.

    思路:

    这一题比较巧妙,实际上是这样的一个循环:





    如图所示,通过循环找到第m个,标记为f,f的下一个标记为t,f指向f 的next的next,s指向t,t 指向f.这是第一次,

    然后呢,f 还是指向f 的next的next,slow 指向刚刚f 的next,也就是被标记的t ,如此一来,便完成循环。

    代码:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* reverseBetween(ListNode* head, int m, int n) {
            /*ListNode *dummy=new ListNode(0);
            dummy->next = head;
            ListNode *slow = dummy;
            n -= m;
            while (--m)
                slow = slow->next;
            ListNode *fast = slow->next, *tmp;
            while (n--) {
                tmp = fast->next;
                fast->next = fast->next->next;
                tmp->next = slow->next;
                slow->next = tmp;
            }
            return dummy->next;*/
            
            ListNode *dummy=new ListNode(0);
            dummy->next=head;
            
            ListNode *slow=dummy;
            n=n-m;//这一句话不能够放在下面循环的后面,因为m变了。
            while(--m){
                slow=slow->next;//在m个之前的一个
            }
            
            ListNode *fast=slow->next,*tmp;
            while(n--){
                tmp=fast->next;
                fast->next=fast->next->next;
                
                tmp->next= slow->next;
                slow->next=tmp;
                //fast=slow->next;
            }
            return dummy->next;
        }
    };


  • 相关阅读:
    五条面试忠告
    NET平台微服务
    CentOS,net core2 sdk nginx、supervisor、mysql
    搭建基于java环境
    产生唯一随机码的方法分析
    SpringBoot JPA 专题
    关于 MySQL 的 boolean 和 tinyint(1)
    org.springframework.data.mapping.PropertyReferenceException: No property created found for type
    交流心得
    github如何删除一个repository(仓库)
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519856.html
Copyright © 2011-2022 走看看