LeetCode 24. 两两交换链表中的节点
题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
javascript
给定 1->2->3->4, 你应该返回 2->1->4->3.
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
非递归解法
javascript
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var swapPairs = function (head) {
if (head == null || head.next == null) return head;
let hummyHead = new ListNode(); // 虚拟节点
hummyHead.next = head;
let p = hummyHead;
let node1, node2; // 当前要交换的两个节点
while ((node1 = p.next) && (node2 = p.next.next)) {
// 进行交换操作
node1.next = node2.next;
node2.next = node1;
// 将链表串起来
p.next = node2;
p = node1;
}
return hummyHead.next;
};
递归解法
javascript
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var swapPairs = function (head) {
if (!head || !head.next) return head;
let node1 = head,
node2 = head.next;
node1.next = swapPairs(node2.next);
node2.next = node1;
return node2;
};
javascript
学如逆水行舟,不进则退