问题描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
解决思路:
递归,交换,指针后移。 移的时候要主意除了第一次后移,以后的后移都是移两步。因为第一次后移resultHead本身指向了一个值,而往后的移动,都是.next指向第一个值
/*
*用途:两两交换链表中的节点
*/
ListNode resultHead = null;//结果头
ListNode result = null;//结果头
public ListNode swapPairs(ListNode head) {
if (head == null) return null;
if (result == null && head.next == null) {
return head;
}
//1.递归 2.三步步交换
if (head.next != null) {
ListNode two = head.next;
head.next = head.next.next;
two.next = head;
if (result == null) {
result = two;
resultHead = result;
result = result.next;
} else {
result.next = two;
result = result.next.next;
}
swapPairs(two.next.next);
}
return resultHead;
}
leetCode提交结果: