题目简介:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
1 | 输入:head = [1,2,3,4] |
示例 2:
1 | 输入:head = [] |
示例 3:
1 | 输入:head = [1] |
提示:
- 链表中节点的数目在范围
[0, 100]
内 0 <= Node.val <= 100
思路:
使用递归,递归的终止条件为没有结点或只有一个结点。
在两两交换结点时,用 head
表示原始链表的头节点,用 newhead
表示新的链表的头节点。
则原始链表中的其余节点的头节点是 newHead -> next
,令 head -> next = swapPairs(newhead -> next)
,表示将其余节点进行两两交换,交换后的新的头节点为 head
的下一个节点。然后令 newHead -> next = head
,即完成了所有节点的交换。最后返回新的链表的头节点 newhead
。
代码如下:
1 | /** |