解法一:模拟

注意指针更新顺序。

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode() {}
  7. * ListNode(int val) { this.val = val; }
  8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9. * }
  10. */
  11. class Solution {
  12. public ListNode swapPairs(ListNode head) {
  13. ListNode root = new ListNode(0, head);
  14. // 待交换结点的前一个结点
  15. ListNode last = root;
  16. // 第一个待交换结点
  17. ListNode first = head;
  18. // 第二个待交换结点
  19. ListNode second;
  20. while ((first != null) && (first.next != null)) {
  21. // 交换结点
  22. second = first.next;
  23. last.next = second;
  24. first.next = second.next;
  25. second.next = first;
  26. // 更新指针
  27. last = first;
  28. first = first.next;
  29. }
  30. return root.next;
  31. }
  32. }