题解一:
迭代:设置节点指针存储结果,遍历链表,直接修改节点的指向。
class Solution {public ListNode swapPairs(ListNode head) {ListNode result = new ListNode();result.next = head;ListNode temp = result;while (temp.next != null && temp.next.next != null) {ListNode node1 = temp.next;ListNode node2 = temp.next.next;temp.next = node2;node1.next = node2.next;node2.next = node1;temp = temp.next.next;}return result.next;}
}
题解二:
递归:将链表节点传入递归函数,如果节点位于链表尾部且无需交换则直接返回,否则将该节点和其下一节点交换并调用递归函数。
class Solution {public ListNode F(ListNode node) {if (node != null && node.next != null) {ListNode node1 = node;ListNode node2 = node.next;ListNode node3 = node.next.next;node2.next = node1;node1.next = F(node3);return node2;} else return node;}public ListNode swapPairs(ListNode head) {return F(head);}
}