示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
题解:使用递归,分别传入 1、3 奇数节点,传1返回2,传3返回4,将传入的节点下一个指针指向返回的节点;再将节点2的指针指向1,返回节点2。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null){
return head;
}
// 存储传入的下一节点,例如传入节点1,保存的节点是节点2
ListNode next = head.next;
// 递归,将传入的下一节点指向下下个节点,
// 例如head是节点1,next.next则为第三个节点
head.next = swapPairs(next.next);
// 例如传入的head为节点1,则next为节点2,
// 将节点2的下一个节点指向节点1,进行交换
next.next = head;
// 返回节点2
return next;
}
}