- 题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5ea4aeda596b27cad609daaa660953ca.png)
- 题目分析:该题如果先确定链表的节点数再进行交换会非常麻烦,因此我们只需通过递归的方法来进行交换。在交换前首先需判断该节点与其之后的节点是否为空,若为空则将head节点直接返回,若均不为空则首先定义一个空节点用来存储交换后的头结点,然后再次调用swapPairs()函数用于对紧接着的一对节点进行交换,等所有的节点都交换完毕则返回 “l1” 节点。
- 代码展示:
/**
* 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;
ListNode l1;
l1 = head.next;
head.next = swapPairs(l1.next);
l1.next = head;
return l1;
}
}