zoukankan      html  css  js  c++  java
  • [LeetCode] Swap Nodes in Pairs 解题报告


    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.
    » Solve this problem

    [解题思路]
    双指针互换,要考虑一些边界条件,比如链表为空,链表长度为1,链表长度为2.
    加一个safeGuard可以避开链表长度为2的检测。

    [Code]
    1:  ListNode *swapPairs(ListNode *head) {   
    2: if(head == NULL) return NULL;
    3: if(head->next == NULL) return head;
    4: ListNode* safeG = new ListNode(-1);
    5: safeG->next= head; // head will be changed in next switch
    6: ListNode *pre = head->next;
    7: ListNode *cur = head;
    8: ListNode *post = safeG;
    9: while(pre!=NULL)
    10: {
    11: ListNode* temp = pre->next;
    12: pre->next = cur;
    13: cur->next = temp;
    14: post->next = pre;
    15: post= cur;
    16: if(post->next == NULL) break;
    17: cur = post->next;
    18: pre = cur->next;
    19: }
    20: head = safeG->next;
    21: delete safeG;
    22: return head;
    23: }

    Haoran给了一个递归解法,更简洁
    1:    ListNode *swapPairs(ListNode *head) {  
    2: if (head == NULL || head->next == NULL) {
    3: return head;
    4: }
    5: ListNode* nextPair = head->next->next;
    6: ListNode* newHead = head->next;
    7: head->next->next = head;
    8: head->next = swapPairs(nextPair);
    9: return newHead;
    10: }


  • 相关阅读:
    第二次结对编程作业
    团队项目-需求分析报告
    团队项目-选题报告
    Git安装
    VI编辑,backspace无法删除解决方法
    VM虚拟机,Linux系统安装tools过程遇到 what is the location of the “ifconfig” program
    Ubuntu安装mysql
    Linux配置Tomcat
    Linux配置JDK
    鸡汤
  • 原文地址:https://www.cnblogs.com/codingtmd/p/5078945.html
Copyright © 2011-2022 走看看