这个系列没啥花头,就是纯 leetcode 题目拆解分析,不求用骚气的一行或者小众取巧解法,而是用清晰的代码和足够简单的思路帮你理清题意。让你在面试中再也不怕算法笔试。
17. 两两交换链表中的节点 (swap-nodes-in-pairs)
标签
- LinkList 操作
- 中等
题目
这里不贴题了,leetcode打开就行,题目大意:
两两交换链表中的节点,就是和题目一样。
基本思路
假设我们的链表是
head -> node1 -> node2 -> node3 -> node4
|
current
实际上第一回合目标就是把 node1 node2 交换,我们关注 current -> node1 -> node2交换之后的节点关系要变成 current -> node2 -> node1。
其实要干的就这几步:
current.next = node2
node1.next = node2.next
node2.next = node1
current = node1
尝试画下图表示链接看,非常简单,我不贴了。
写法实现
var swapPairs = function(head) {
// 常规操作,加前置节点
const preHead = new ListNode(-1);
preHead.next = head;
// 设置一个current指针,指向我们下面要交换的两个节点
let current = preHead;
// 如果 current 的后面没有节点或者只有一个节点,则没有更多的节点需要交换,因此结束交换
while (current.next !== null && current.next.next !== null) {
const node1 = current.next;
const node2 = current.next.next;
current.next = node2;
node1.next = node2.next;
node2.next = node1;
current = node1;
}
return preHead.next;
};
今天就到这儿,想跟我一起刷题的小伙伴可以加我微信哦
搜索我的微信号infinity_9368,可以聊天说地
加我暗号 "天王盖地虎" 下一句的英文,验证消息请发给我
presious tower shock the reiver monster,我看到就通过,暗号对不上不加哈
参考