题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
思路
1.这道题可以使用递归思想求解。
2.我们只需要关注递归的上层抽象,而不需要关注递归栈内所有的操作;换句话说,我们可以只交换一下两个链表结点,然后在此基础上进行递归操作即可。
3.注意处理递归的结束条件。
单纯的交换两个结点
ListNode next = head.next; //我们把head.next也修改为两两交换后的结点就可以了,也就是说,从它开始进行递归操作。 head.next = head.next.next; next.next = head;
Java代码实现
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode next = head.next;
head.next = swapPairs(next.next);
next.next = head;
return next;
}Goalng代码实现
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
next := head.Next
head.Next = swapPairs(next.Next)
next.Next = head
return next
}
京公网安备 11010502036488号