两两交换链表中的节点(迭代)
来练练手把:力扣题目链接
一、两两交换链表中的节点注意事项
- 力扣中传入的链表是没有虚拟节点的,所以我们应该要自己在方法中创建一个虚拟节点,方便进行处理
- 如果链表的节点数量大于两个,在交换前面两个节点的时候,与交换节点相邻的下一个节点会与前两个节点断开,所以我们要创建一个temp指针保存该节点的地址,以方便我们交换完以后可以继续处理后面的节点
- 因为虚拟节点不能移动,所以我们要创建一个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;
}
总结
本文介绍了力扣的两两交换链表的题目,欢迎交流