赞
踩
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
该题需要我们把链表中的节点进行两两的交换,且必须要实际交换节点不能只是改变节点中的值。一次遍历完成两两交换,详细步骤如下,
/** * 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) { if(Objects.isNull(head)){ return null; } ListNode newNode = new ListNode(-1); newNode.next = head; ListNode temp = newNode; while(temp.next != null && temp.next.next != null){ // 要被交换的节点一 ListNode first = temp.next; // 要被交换的节点二 ListNode second = temp.next.next; // 连接前后两个已经交换节点 temp.next = second; // 交换节点 first.next = second.next; second.next = first; // 指向下一个遍历节点 temp = first; } return newNode.next; } }
只有一次遍历所以空间复杂度为O(n),空间复杂度为O(1)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。