开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
题目:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
🙇♂️ 感想:本题涉及链表数据交换,通过指针指向的改变来交换数据,同时要注意无限循环,所以要注意切断尾部的指针指向空
🙇♂️ 解题思路: 本题是将链表中的数值两两交换, 我选择采用递归的形式。首先将head.next的值作为头结点, 并且要同时切断它的next的指向。 如果有三个以上的节点,则产生递归,如果没有三个以上的节点, 则next要指向null, 防止产生环形链表。然后再将刚刚指定的头结点的next指向head
function swapPairs(head: ListNode | null): ListNode | null {
if (!head || !head.next) return head
let temp = new ListNode(head.next.val, null) //
if (head.next.next) {
head.next = swapPairs(head.next.next) //
} else {
head.next = null
}
temp.next = head // 1
head = temp
return head
};