当前位置: 代码迷 >> 综合 >> Leetcode 24 Swap Nodes in Pairs
  详细解决方案

Leetcode 24 Swap Nodes in Pairs

热度:106   发布时间:2023-10-28 05:02:16.0

最近在刷亚麻的tag,准备准备可能即将到来的VO.

题目描述

Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list’s nodes, only nodes itself may be changed.

example

Given 1->2->3->4, you should return the list as 2->1->4->3.

思路

首先设置一个dummy头节点,然后设置3个指针:l1,l2和prev。l1和l2分别指向要交换的两个node,prev指向上一次交换后的末尾节点,用于更新每组(2个连续的node视为一组)之间的连接。prev初始为dummy。
每次处理2个node,将2个node的顺序换过来之后,交换l1和l2两个指针(方便处理两个指针向后移动)并更新prev的值为l2(此时l2已经过交换),最后再向前移动l1和l2两个指针即可。

复杂度分析

时间复杂度O(n), 空间复杂度O(1)

代码

class Solution {
    public ListNode swapPairs(ListNode head) {
    ListNode dummy = new ListNode(0);dummy.next = head;if(head == null)return null;ListNode l1 = head, l2 = head.next, prev = dummy;while(l1 != null && l2 != null){
    l1.next = l2.next;l2.next = l1;prev.next = l2;// swapListNode tmp = l1;l1 = l2;l2 = tmp;// update prevprev = l2;// move onl1 = l2.next;l2 = (l1 == null) ? l1 : l1.next;}return dummy.next;}
}
  相关解决方案