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

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

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

示例:

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

说明:

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

方法1:递归(写递归会被鄙视)

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

方法2:循环,两个变量的

class Solution {public:    ListNode* swapPairs(ListNode* head) {        if(!head || !head->next) return head;        ListNode *dummy=new ListNode(0), *pre=dummy, *p=head;        dummy->next=head;        while(p && p->next){            pre->next=p->next;            swap(p->next->next,p);            pre=pre->next->next;            pre->next=p;        }        return dummy->next;    }};# 变量多,可读性更好class Solution {public:    ListNode* swapPairs(ListNode* head) {        while(head==nullptr || head->next==nullptr) return head;        ListNode *dummy=new ListNode(0), *pre=dummy, *p=head, *q=p->next;//head没用上,可以直接用head替代p,节省一个变量        dummy->next=head;        while(p && p->next){            pre->next=q;            p->next=q->next;            q->next=p;            pre=p;            p=p->next;//此时p有可能为空            if(p) q=p->next;        }        return dummy->next;    }};

 

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

你可能感兴趣的文章
C语言编译过程
查看>>
stirling formula prove
查看>>
关于数字类型转化为整型的方法
查看>>
PHP 常用正则表达式整理
查看>>
自然计算
查看>>
自然计算时间复杂度杂谈
查看>>
当前主要目标和工作
查看>>
系统菜单
查看>>
路漫漫其修远兮,吾将上下而求索(2)
查看>>
versions mac yosemite 下崩溃的修复
查看>>
github push 出现connection refused 的处理办法
查看>>
Linux配置sendmail实现PHP发送邮件
查看>>
c++ 特性回顾
查看>>
网站注册的时候,烦人的生日年份选择的改进想法
查看>>
游戏开发两年记 之 工程和理论需双剑合璧
查看>>
Nachos中switch汇编源码分析
查看>>
游戏开发两年之产品逻辑鸡肋么?
查看>>
secureCRT和Xshell登录Ubuntu
查看>>
secureCRT和Xshell登录ubuntu
查看>>
Apache下c语言的cgi如何获得Get,Post参数
查看>>