两两交换链表中的节点
题目描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。1
-
例如:
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3. -
思路:双指针进行求解,
node指向要交换节点的前一个指针,head指向交换的第一个指针
- 代码部分:
public ListNode swapPairs(ListNode head) {
if(head == null || head.next ==null) {
return head;
}
ListNode node = new ListNode(-1);
ListNode res = node; // node res 是头结点
while (head != null && head.next != null) {
//给定 1->2->3->4, 你应该返回 2->1->4->3.
//node指向要交换节点的前一个指针,head指向交换的第一个指针
node.next = head.next; // 单独2
head.next = head.next.next; // 将 1 接上 3 4
node.next.next = head; // 2 接上 1
//更新node和head
node = node.next.next; // 为下一次循环做准备
head = head.next;
}
return res.next;
}
https://leetcode-cn.com/problems/swap-nodes-in-pairs/ ↩︎