[LeetCode]两两交换链表中的节点(Swap Nodes in Pairs)

79次阅读

共计 620 个字符,预计需要花费 2 分钟才能阅读完成。

题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:

你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

ListNode 数据结构
class ListNode {
int val;
ListNode next;

ListNode(int x) {
val = x;
}
}
解决方法
使用 3 个指针进行两两交换,分别是前指针(pre), 当前指针(cur), 后指针(next)pre 的作用是在 cur 与 next 交换后进行连接,防止断链
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null)
return head;

ListNode tempHead = new ListNode(0);
tempHead.next = head;
ListNode pre = tempHead;
ListNode cur = pre.next;
ListNode next;

while (cur != null && cur.next != null) {
next = cur.next;
cur.next = next.next;
next.next = cur;
pre.next = next;
pre = cur;
cur = pre.next;
}

return tempHead.next;
}
本文首发:https://lierabbit.cn/2018/09/…

正文完
 0