LeetCode24. 两两交换链表中的节点
作者:互联网
LeetCode24. 两两交换链表中的节点
题目描述
/**
*
* 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
* <p>
* 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
*
*/
思路分析
- 使用迭代的思想,依次将两两节点进行交换
- 此题目中head节点指向一个非空的元素,因此可以定义一个空节点,作为交换后节点的头节点,因此先构造一个以空节点开头的新节点,然后依次两两交换
- 注意节点元素的指向发生变化时,按照顺序将指向发生变化
- 分析如下
源码及分析
public ListNode swapPairs(ListNode head) {
//数据校验
if (head == null || head.next == null) {
return head;
}
//定义一个辅助头节点指向原始的链表,形成一个带有头节点的新链表,然后操作新链表
ListNode newHead = new ListNode();
newHead.next = head;
//因为头节点newHead不能动,定义一个辅助变量cur
ListNode cur = newHead;
//循环交换
while (cur.next != null && cur.next.next != null) {
//定义两个辅助变量保存要交换的两个节点
ListNode node1 = cur.next;
ListNode node2 = cur.next.next;
//定义一个临时变量用于交换
cur.next = node2;
node1.next = node2.next;
node2.next = node1;
//指针后移,使cur始终指向要交换的节点的前一个节点
cur = node1;
}
return newHead.next;
}
标签:ListNode,cur,交换,next,链表,LeetCode24,节点 来源: https://www.cnblogs.com/mx-info/p/14773227.html