两两交换链表中的节点

两两交换链表中的节点

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

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

示例#

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

题解#

Copy
/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} head * @return {ListNode} */ var swapPairs = function(head) { var headNode = new ListNode(null, head); var pre = headNode; var cur = head; while(cur && cur.next){ let curTmp = cur; let nextTmp = cur.next; curTmp.next = nextTmp.next; pre.next = nextTmp; nextTmp.next = curTmp; pre = curTmp; cur = curTmp.next; } return headNode.next; };

思路#

通过迭代的方式实现两两交换链表中的节点,直接遍历整个链表即可,首先定义一个空的头结点,之后定义前置节点与当前正需要处理的节点,当正在处理的节点存在以及当前节点的下一个节点都存在时进行循环,将当前节点与当前节点的下一个节点进行缓存,之后将curNode节点的next赋值为nextNode节点的next,即首先将该节点的下一个节点指向nextNode的下一个节点,之后将preNodenext赋值为nextNode,将nextNodenext赋值为curNode,最后将preNode赋值为curNodecurNode赋值为curNodenext,注意此时的curNode其实已经被交换换成了,是两个节点中的后一个节点,最后等待循环完成后返回头结点的next即可。

每日一题#

Copy
https://github.com/WindrunnerMax/EveryDay

参考#

Copy
https://leetcode-cn.com/problems/swap-nodes-in-pairs/
posted @   WindRunnerMax  阅读(122)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
CONTENTS