题目描述
解题
最关键点:节点交换顺序。
①首先指向第二节点;
②接着指向第一节点 or 第一节点指向后续节点(√)
若先指向第一节点 ,现有节点无法指向第三节点及以后节点
故 应先给第一节点指向第二节点之后节点 再将第二节点指向第一
③第二节点指向第一节点
④将链表位置更新到未置换位置
public class Solution {
public ListNode SwapPairs(ListNode head) {
if(head==null || head.next==null) return head;
ListNode result = new ListNode(0);
result.next = head;
var head_1 = result;
exchange(head_1,head_1.next,head_1.next.next);
return result.next;
}
void exchange(ListNode head,ListNode first,ListNode second)
{
head.next = second;
first.next = second.next;
second.next = first;
head = first;
if (head.next == null || head.next.next == null) return;
exchange(head,head.next,head.next.next);
}
}