题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 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 }