Leecode no.24 两两交换链表中的节点

package com.example.demo.leecode;

/**
* 两两交换链表中的节点
* @Date 2020/12/16
* @author Tang
*
* 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
* 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
*/
public class SwapNodesInPairs {


public ListNode execute(ListNode head){

//创建一个首节点 value为null
ListNode first = new ListNode();
first.next = head;
doSwap(first);

return first.next;
}

private void doSwap(ListNode left){
ListNode right = left.next;
if(right == null || right.next == null){
return;
}
left.next = right.next;

right.next = left.next.next;
left.next.next = right;
doSwap(right);
}

public static void main(String[] args) {

ListNode l1 = new ListNode(1);
ListNode l2 = new ListNode(2);
ListNode l3 = new ListNode(3);
ListNode l4 = new ListNode(4);
ListNode l7 = new ListNode(5);
ListNode l8 = new ListNode(6);

l1.next = l2; l2.next = l3; l3.next = l4;
l4.next = l7; l7.next = l8;
ListNode execute = new SwapNodesInPairs().execute(l1);

System.out.println(execute.val);
while(execute.hasNext()){
execute = execute.next;
System.out.println(execute.val);

}


}

}
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
boolean hasNext(){
return next != null;
}

}
原文地址:https://www.cnblogs.com/ttaall/p/14142914.html