LeetCode:Swap Nodes in Pairs Java实现

本文介绍了解决LeetCode中链表成对交换问题的两种方法:迭代法和递归法。迭代法通过定义辅助节点和记录下一组节点的开始节点来完成顺序交换。递归法则通过不断调用自身,返回交换后的起始节点,简洁明了地解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode题目:Swap Nodes in Pairs

题目概述

Given 1->2->3->4,
Return 2->1->4->3.

解题方法

  • 迭代
public ListNode swapPairs(ListNode head) {
	if (head==null || head.next==null) {
		return head;
	}
	ListNode pre = new ListNode(-1);
	ListNode next = null;
	ListNode newHead = head.next; 
	while (head!=null && head.next!=null) {
		next = head.next.next;	(1)
		pre.next = head.next;	(2)
		head.next.next = head;	(3)
		head.next = next;	(4)
		pre = head;	(5)
		head = next;	(6)
	}
	return newHead;
}

思路:完成顺序交换,同时要记录下一组节点的开始节点和前一组节点的结束节点。
(1)循环下次进入的head节点为:当前head节点的下一个的下一个节点,即: ‘3’ ;
(2)将定义的前节点指向交换顺序之后排在前面的节点,即: ‘2’ ;
(3)交换顺序,即改变指向:‘2’ 一> ‘1’;
(4)将交换顺序之后排在后面的节点指向链表正常顺序的后序节点,即: ‘1’ 一> ‘3’;
(5)记录当前组的结束节点;
(6)将head指向下一组节点的开始节点,进入下一轮循环。

  • 递归
public ListNode swapPairs(ListNode head) {
	if (head==null || head.next==null) {
		return head;
	}
	ListNode next = head.next;		(1)
	head.next = swapPairs(head.next.next);		(2)
	next.next = head;		(3)
	return next;		(4)
}

思路:
(1)记录该组当前节点的下一个节点,即: ‘2’ ;
(2)该步为整个算法的核心,重点在于思想的理解:将head节点(此时将head节点当做是交换顺序之后的位置了,所以head节点需指向下一组节点)指向下一组交换顺序之后的开始节点。即该方法需返回 ‘4’,此时顺序为 ‘1’ 一> ‘4’;
此处不需要深究方法怎么实现,只需要知道:该方法得到的是下一组节点交换顺序之后的开始节点
(3)交换顺序,即 ‘2’ 一> ‘1’ ,此时顺序为:‘2’ 一> ‘1’ 一> ‘4’;
(4)因为在步骤2时需要的返回值是交换顺序之后的开始节点,所以此处返回 next,即步骤1记录的节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值