大家好,我是Ryan,今天继续来分享关于链表的小考点:两两交换链表节点。
首先引一下leetcode上的题目:两两交换链表中的节点
题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
这道题其实思路很简单,因为每次只需要交换两个节点,设为node1和node2,交换完后将位置后移就行。需要注意的是我们需要使用一个虚拟头节点来记录开始位置和上一个节点。
接下来给出具体代码:
public static ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
//需要再定义cur是因为最后返回时要用到dummy.next,即链表头节点
ListNode cur = dummyHead;
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 dummyHead.next;
}
相信大家这段代码应该都看得懂,我们下期再见。