两两交换链表的节点Java语言

两两交换链表中的节点(迭代)

来练练手把:力扣题目链接


一、两两交换链表中的节点注意事项

  1. 力扣中传入的链表是没有虚拟节点的,所以我们应该要自己在方法中创建一个虚拟节点,方便进行处理
  2. 如果链表的节点数量大于两个,在交换前面两个节点的时候,与交换节点相邻的下一个节点会与前两个节点断开,所以我们要创建一个temp指针保存该节点的地址,以方便我们交换完以后可以继续处理后面的节点
  3. 因为虚拟节点不能移动,所以我们要创建一个pre指针进行交换操作,每次交换完,pre指针都要指向即将交换的节点的上一个节点

二、代码如下

java语言

			//链表相邻两个节点交换
		 public ListNode swapPairs(ListNode head) {
			 //创建虚拟节点,方便进行操作
			 ListNode  dummyNode = new ListNode(0);
			 //将虚拟节点与head节点连接起来
			 dummyNode.next = head;
			 //虚拟节点不能动,创建pre指针进行对链表的操作
			 ListNode pre = dummyNode;
			 //whlie内的条件是看pre指针后有没有两个或者两个以上的节点
			 //如果没有,则返回首节点
			 while(pre.next!=null&&pre.next.next!=null){
				 //创建一个temp指针保存要交换的两个节点的后面那个节点,因为
				 //交换后,交换的两个节点与后面那个节点会断开,要保存该节点的地址
				 ListNode temp = head.next.next;
				 //交换两个节点
				 pre.next = head.next;
				 head.next.next =head;
				 head.next = temp;
				 //pre指向接下来要交换的节点的前一个节点
				 pre = head;
				 //head指针指向下来要交换的两个节点的第一个节点
				 head = head.next; 
			 }
			 //返回修改后的链表
			 return dummyNode.next;
		 }

总结

本文介绍了力扣的两两交换链表的题目,欢迎交流

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值