题目:力扣https://leetcode-cn.com/problems/swap-nodes-in-pairs/
/**
* 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 temp = head.next;
head.next = swapPairs(temp.next);
temp.next = head;
return temp;
}
}
?
思路:总结来说就是“递归”的思想,把问题一步步简化到最简单的形式,然后再将结果一层一层回溯,将已经处理好的部分链表返回到上一层,直至回到第一层则得出题目所求的链表。这份代码是学习了大佬的博客,然后再自己跟着编写的。
?1.定义递归出口。简而言之,就是当链表无法交换的时候便结束了呗~
if(head==null || head.next==null){
return head;
}
2.一共三个节点head, temp, swapPairs(temp.next),我们需要做的就是交换前两个节点,因为第三个是已经处理完的链表部分,不需要动它。
ListNode temp = head.next;
head.next = swapPairs(temp.next);
temp.next = head;
3.把处理后的链表返回至上一层,直至递归出口为止。
return temp;
|