zoukankan      html  css  js  c++  java
  • Swap Nodes in Pairs leetcode

    Given a linked list, swap every two adjacent nodes and return its head.

    For example,
    Given 1->2->3->4, you should return the list as 2->1->4->3.

    Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

    Subscribe to see which companies asked this question

     
    未优化的代码,用3个临时指针
    ListNode* swapPairs(ListNode* head) {
        if (head == nullptr || head->next == nullptr)
            return head;
        ListNode *pre = head;
        ListNode *cur = pre->next;
        ListNode *net = cur->next;
        head = cur;
        while (true)
        {
            cur->next = pre;
            if (net == nullptr || net->next == nullptr) {
                pre->next = net;
                break;
            }        
            pre->next = net->next;
            pre = net;
            cur = pre->next;        
            net = cur->next;    
        }
        return head;
    }

    惊人的解法,用双重指针,开阔思路,本以为自己可以随心所欲使用双指针,看来还是差得远

    ListNode *swapPairs(ListNode *head) {
        ListNode **p = &head;
    
        while (*p && (*p)->next) {
            ListNode *t = (*p)->next;
    
            (*p)->next = t->next;
            t->next = *p;
            *p = t;
    
            p = &(*p)->next->next;
        }
    
        return head;
    }
  • 相关阅读:
    os模块
    sys模块
    time时间模块
    collections模块
    修改Jenkins的主目录步骤
    jenkins管理
    求2个集合的差集
    MVC动态二级域名解析
    解决MVC 时间序列化的方法
    MVC修改视图的默认路径
  • 原文地址:https://www.cnblogs.com/sdlwlxf/p/5122770.html
Copyright © 2011-2022 走看看