- 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]
思路 /** * 两两交换链表中的节点 * * 定义一个虚拟头节点,记录head 的位置 * 定义三个指针、头一个节点,两个交换指针,3个节点 3个节点的, * 处理整个链表,遇到奇数链表,最后一位不处理 * 时间复杂度 o (2/n) ;两两交换,只需要处理2/n 的时间就可以处理完 * 空间o(1) 没有使用额外空间 */
代码
public ListNode swapPairs(ListNode head) {
if (head == null) {
return null;
}
if (head.next == null) {
return head;
}
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode p = dummy;
ListNode a = null;
ListNode b = null;
while (p.next != null && p.next.next != null) {
a = p.next;
b = a.next;
p.next = b;
a.next = b.next;
b.next = a;
p = a;
}
return dummy.next;
}
|