Leetcode 24:Swap Nodes in Pairs

2021/7/11 11:08:04

本文主要是介绍Leetcode 24:Swap Nodes in Pairs,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Leetcode 24:Swap Nodes in Pairs

Given a linked list, swap every two adjacent nodes and return its head.

说人话:

将链表中元素每两个交换一下。

举例:

image-20210206104541067

[法1] 穿针引线

思路

本题是比较复杂的穿针引线。首先我们需要定义 4 个指针:

  • pre:交换结点对的前一个结点
  • node1:第一个要交换的结点
  • node2:第二个要交换的结点
  • next:交换结点对的下一个节点

交换过程如下图:

image-20210206105046375

pre->next = node2

node2.next = node1

node1.next = next;

拉直后:

image-20210206105126066

交换后继续往后交换:

p = node1

当没有下一轮需要交换的时候(pre.next == null)就完成了。

代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {

        //虚拟头结点
        ListNode dummyHead = new ListNode(0,head);
        //前一个节点
        ListNode pre = dummyHead;
        
        //穿针引线
        while(pre.next != null){
            //第一个节点
            ListNode node1 = pre.next;
            if(node1 == null){
                break;
            }
            //第二个节点
            ListNode node2 = node1.next;
            if(node2 == null){
                break;
            }
            //下一结点
            ListNode next = node2.next;
            //交换
            pre.next = node2;
            node2.next = node1;
            node1.next = next;
            pre = node1;
        }

        return dummyHead.next;

    }
}
提交结果
image-20210206105607166
代码分析
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)


这篇关于Leetcode 24:Swap Nodes in Pairs的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程