【递归】两两交换链表中的节点(medium)
两两交换链表中的节点(medium)
- 题⽬描述:
- 解法(递归):
- 算法代码:
题⽬链接:24. 两两交换链表中的节点
题⽬描述:
给你⼀个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的
值的情况下完成本题(即,只能进⾏节点交换)。
⽰例 1:
输⼊:head = [1,2,3,4]
输出:[2,1,4,3]
⽰例 2:
输⼊:head = []
输出:[]
⽰例 3:
输⼊:head = [1]
输出:[1]
提⽰:
链表中节点的数⽬在范围 [0, 100] 内
0 <= Node.val <= 100
解法(递归):
算法思路:
- 递归函数的含义:交给你⼀个链表,将这个链表两两交换⼀下,然后返回交换后的头结点;
- 函数体:先去处理⼀下第⼆个结点往后的链表,然后再把当前的两个结点交换⼀下,连接上后⾯处理后的链表;
- 递归出⼝:当前结点为空或者当前只有⼀个结点的时候,不⽤交换,直接返回。
注意注意注意:链表的题⼀定要画图,搞清楚指针的操作!
算法代码:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution{public ListNode swapPairs(ListNode head) {if(head == null || head.next == null) return head;ListNode tmp = swapPairs(head.next.next);ListNode ret = head.next;ret.next = head;head.next = tmp;return ret;}
}