一、题目描述
来源:力扣(LeetCode)
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。
你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
网络异常,图片无法展示
|
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
- 链表中节点的数目在范围 [0, 100] 内
- 0 <= Node.val <= 100
二丶思路分析
通过迭代的方式实现两两交换链表中的节点
- 创建一个哑哨节点
dummyHead
指向head
- 初始化一个当前节点
curTempNode
等于dummyHead
- 每次交换
curTempNode
后面的两个节点l1
和l2
- 当
curTempNode
后面存在少于两个节点时候,停止。 - 更新当前节点
curTempNode
三、代码实现
/** * 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); dummyHead.next = head; ListNode curTempNode = dummyHead; while (curTempNode.next != null && curTempNode.next.next != null){ ListNode l1 = curTempNode.next; ListNode l2 = curTempNode.next.next; //交换 l1 l2节点 curTempNode.next = l2; l1.next = l2.next; l2.next = l1; curTempNode = l1; } return dummyHead.next; } }
复杂度分析
- 时间复杂度:
网络异常,图片无法展示|
n
是链表的节点数量 - 空间复杂度:
网络异常,图片无法展示|
运行结果
网络异常,图片无法展示
|
总结
这个题目就是通过迭代或者一个递归,来完成两两节点的交换。
主要还是在对于链表的使用的联系。思路还是很容易理解的。
再接再厉,继续加油~~