两两交换链表的节点
用递归的思想:
1.递归的结束条件:剩余未反转的节点的数量少于两个的时候,就不需要进行反转,直接返回
2.否则就将两个节点进行反转
3.再用递归将后面的节点也进行翻转,返回反转后的头节点
4.将前一个反转后的区间与后面翻转后的区间进行连接
代码::
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
public ListNode swapLinkedPair (ListNode head) {
//用递归进行解决:
//递归的终止条件:如果剩下的节点的个数不足两个,就不需要进行反转了,就直接返回节点
if(head==null||head.next==null){
return head;
}
//用newhead记录一下两两交换后链表的头节点
//用tail用来记录下一个两两反转后的头结点
ListNode newhead=head.next;
ListNode tail=head.next.next;
//进行两两翻转
head.next.next=head;
//递归找到后面的两两翻转后的头结点
head.next=swapLinkedPair(tail);
return newhead;
}
}