博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 24. Swap Nodes in Pairs 解题报告
阅读量:2359 次
发布时间:2019-05-10

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

LeetCode 24. Swap Nodes in Pairs 解题报告

题目描述

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


示例

Example 1:

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..


解题思路

我的思路:

这道题是考链表的更改操作,没什么难度,细心一些就好。整个过程就是从头开始,对于每一对需要交换的节点,按顺序调整节点的next指针,使其指向正确的节点。由于头指针也是需要交换的,所以我的算法中用了一个小技巧,就是另外设置了一个辅助头结点指向链表的头结点,这样就可以对整个链表进行处理。每次调整时,我都是利用前一个节点的指针和第一个待交换的节点指针进行交换操作,具体过程如下图:

process
在纸上演算一下就能知道调整的顺序应该是怎样的,只要细心一些就能很快Accept。

参考思路:

大神们的解法都是中规中矩地两两节点交换,不过不同的是代码的简洁程度。他们写的好简练。见下面的参考代码进行参考学习。


代码

我的代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* swapPairs(ListNode* head) {        ListNode *newHead = new ListNode(0);        newHead->next = head;        ListNode *pre = newHead, *first;        while (pre) {            if (!pre->next || !pre->next->next)                break;            first = pre->next;            pre->next = first->next;            first->next = first->next->next;            pre->next->next = first;            pre = first;        }        return newHead->next;    }};

参考代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* swapPairs(ListNode* head) {        ListNode **pp = &head, *a, *b;        while ((a = *pp) && (b = a->next)) {            a->next = b->next;            b->next = a;            *pp = b;            pp = &(a->next);        }        return head;    }};

总结

这道题就是水题(我承认我偷懒了),链表的指针操作都是很基础的东西,只要指针的操作顺序弄懂,基本就能做出来。从其他人的代码里学到了一些小技巧,比如巧用计算的结果进行条件判断(当然要注意=跟==的区别,不能乱用)。

早上完成这学期最后一门课的展示,终于上完了大学里所有的课程,接下来就是实习,找工作跟完成毕设了,要加油啦,朝着自己的梦想奋斗!

你可能感兴趣的文章
如何正确安装 Google Picasa 2 中文版?
查看>>
刀刀爱情语录
查看>>
【转】技术趋势:Functional Pogramming函数编程风云再起
查看>>
【转帖】全球15个顶级技术类博客
查看>>
【转贴】使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
查看>>
【转帖】最爱你的男孩总把你挂在心上
查看>>
今天去献血啦,在这里做一回义务献血宣传员吧 ^_^
查看>>
推荐一款免费的桌面搜索软件 VistaGlance 1.2 ,按文件名称建立索引!
查看>>
生活与爱的感悟——“英雄天地”博客摘录
查看>>
Adobe Acrobat 部分文件无法删除的解决办法
查看>>
忘记系统登录密码的简便方法
查看>>
获取论文全文的13种方法
查看>>
把爱传递——写在第10次献血和成为一名义工之际
查看>>
应用随机过程概率模型导论(9th 英文版) Sheldon M.Ross 共享
查看>>
两个不错的 Matlab 时频分析工具箱
查看>>
【转】研究生必读→如何获得全文文献
查看>>
考博心得集锦——成功因素、相关准备工作
查看>>
考博联系导师的办法[转]
查看>>
考博考硕联系导师的注意事项
查看>>
2008北航博士考试总结【转】
查看>>