博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PigyChan_LeetCode 24. 两两交换链表中的节点
阅读量:3945 次
发布时间:2019-05-24

本文共 1204 字,大约阅读时间需要 4 分钟。

24. 两两交换链表中的节点

难度中等

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

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

在这里插入图片描述

输入:head = [1,2,3,4]

输出:[2,1,4,3]
示例 2:

输入:head = []

输出:[]
示例 3:

输入:head = [1]

输出:[1]

提示:

* 链表中节点的数目在范围 [0, 100] 内
* 0 <= Node.val <= 100

思路1.0:

(1)每遍历两个节点进行一次交换,利用两个指针指向要进行交换的两个节点

代码1.0:

class Solution {
public: ListNode* swapPairs(ListNode* head) {
if (head == NULL || head->next == NULL) return head; ListNode* left = head; ListNode* right = head->next; head = right; //存在需要交换的对 while (right->next != NULL && right->next->next != NULL) {
ListNode* p = right->next; right->next = left; left->next = p->next; left = p; right = p->next; } ListNode* p = right->next; right->next = left; left->next = p; return head; }};

在这里插入图片描述

思路2.0(使用递归):

(1)每次递归对两个节点进行一次交换,返回新的头节点。

(2)这个返回的新的头节点接在上次递归的尾节点后面

代码2.0:

class Solution {
public: ListNode* swapPairs(ListNode* head) {
if (head == NULL || head->next == NULL) return head; ListNode* p = head; head = head->next; p->next = swapPairs(head->next); head->next = p; return head; }};

在这里插入图片描述

转载地址:http://fvowi.baihongyu.com/

你可能感兴趣的文章
凡事必定不少于三个以上的解决方法
查看>>
带团队的点滴心经
查看>>
五种力量让你如虎添翼
查看>>
你害怕创新吗
查看>>
创新服务的七要素
查看>>
虚伪的奉承也有效
查看>>
蒂姆·库克的五项核心领导力
查看>>
你为何没有成为领导者
查看>>
一切悲剧都源于不当激励
查看>>
别把用户的高期望混同于好体验
查看>>
动机和机会:推动商业发展的引擎
查看>>
4个信号表明你是一个失败的领导
查看>>
成功谈判 你需要几个锦囊?
查看>>
一个人的宽度决定了他的高度
查看>>
善于拜访是另一种经营智慧
查看>>
打造新老员工双赢机制变对立为统一
查看>>
企业如何避免用错人
查看>>
打掉苹果“无与伦比”的傲慢(人民时评)
查看>>
Creating an Android Project
查看>>
Running Your App (android)
查看>>