题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例1:
给定 1->2->3->4, 你应该返回 2->1->4->3.
示例2
给定 1->2->3->4->5, 你应该返回 2->1->4->3->5.
示例代码
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode prev = dummy;
ListNode curr = head;
while (curr != null && curr.next != null) {
prev.next = curr.next;
curr.next = curr.next.next;
prev.next.next = curr;
prev = curr;
curr = curr.next;
}
return dummy.next;
}
要点(思想)
- 借助头结点,每隔一个节点取交换相邻节点的值
- 两种情况的循环结束条件判断
算法图解
图解已经很清晰了,注意2和3的次序,一定是先2后3否则就丢失节点了
循环结束条件的判断
情况1:原链表节点个数为偶数时,curr为null时循环结束
情况2:原链表节点个数为奇数时,curr.next为null时循环结束
所以执行条件就为 (curr.next != null && curr != null), 返回节点就是头节点的下一节点
OK,完事儿