トピック:
リンクリストが与えられた場合、隣接するノードをペアで交換し、交換されたリンクリストを返します。
ノードの内部値を変更するだけではなく、実際にノードを交換する必要があります。
例:
1-> 2-> 3-> 4の場合、2-> 1-> 4-> 3を返す必要があります。
コードに直接:
public static ListNode swapPairs(ListNode head) {
//判断为空或者只有一个节点的情况
if(head == null || head.next == null) return head;
//初始化一个next节点
ListNode next = head.next;//将next节点指向head的下一个节点
head.next = swapPairs(next.next);//head节点指向后面进行递归操作的节点
next.next = head;//next指向head节点
return next;//由于next为新的头节点,返回next节点
}
テストするテストケースを作成します。
package leetCode_024;
public class SwapPairs {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
public static String print(ListNode listNode){//打印节点的方法
StringBuilder sb = new StringBuilder();
while (listNode!=null){
sb.append(listNode.val);
listNode = listNode.next;
}
return sb.toString();
}
}
public static ListNode swapPairs(ListNode head) {
//判断为空或者只有一个节点的情况
if(head == null || head.next == null) return head;
//初始化一个next节点
ListNode next = head.next;//将next节点指向head的下一个节点
head.next = swapPairs(next.next);//head节点指向后面进行递归操作的节点
next.next = head;//next指向head节点
return next;//由于next为新的头节点,返回next节点
}
public static void main(String[] args) {
ListNode listNode = new ListNode(1);//新建节点1
listNode.next = new ListNode(2);//1指向下一个节点2
listNode.next.next = new ListNode(3);//2指向下一个节点3
listNode.next.next.next = new ListNode(4);//3指向下一个节点4
System.out.println(listNode.print(listNode));//1234
listNode = swapPairs(listNode);//两两交换其中相邻的节点,并返回交换后的链表
System.out.println(listNode.print(listNode));//2143
}
}
この問題を解決するには、ステーションBにアクセスしてくださいhttps://www.bilibili.com/video/BV1pJ411s7P4?p=1
これで終わりです。