zoukankan      html  css  js  c++  java
  • LeetCode(24): 两两交换链表中的节点

    Medium!

    题目描述:

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

    示例:

    给定 1->2->3->4, 你应该返回 2->1->4->3.

    说明:

    • 你的算法只能使用常数的额外空间。
    • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    解题思路:

    这道题不算难,是基本的链表操作题,我们可以分别用递归和迭代来实现。对于迭代实现,还是需要建立dummy节点,注意在连接节点的时候,最好画个图,以免把自己搞晕了。

    C++解法一:

     1 class Solution {
     2 public:
     3     ListNode* swapPairs(ListNode* head) {
     4         ListNode *dummy = new ListNode(-1), *pre = dummy;
     5         dummy->next = head;
     6         while (pre->next && pre->next->next) {
     7             ListNode *t = pre->next->next;
     8             pre->next->next = t->next;
     9             t->next = pre->next;
    10             pre->next = t;
    11             pre = t->next;
    12         }
    13         return dummy->next;
    14     }
    15 };

    递归的写法就更简洁了,实际上利用了回溯的思想,递归遍历到链表末尾,然后先交换末尾两个,然后依次往前交换。

    C++解法二:

     1 class Solution {
     2 public:
     3     ListNode* swapPairs(ListNode* head) {
     4         if (!head || !head->next) return head;
     5         ListNode *t = head->next;
     6         head->next = swapPairs(head->next->next);
     7         t->next = head;
     8         return t;
     9     }
    10 };
  • 相关阅读:
    nmap 快速扫描所有端口
    cdh ntpdate 问题
    看22是不是被玻璃破解
    lucas定理
    HDU1398--Square Coins(母函数)
    【转】HDU1028
    【转】母函数(Generating function)详解 — TankyWoo(红色字体为批注)
    HDU--1085--Holding Bin-Laden Captive!(母函数)
    HDU2588--GCD(欧拉函数)
    【转】扩展欧几里德
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/9133800.html
Copyright © 2011-2022 走看看