image-20210907095141452.png

    这个题和k个一组反转链表是一样的题目,只是把K变成了2,其中的思路都是一样的。

    详情参考

    1. class Solution {
    2. public ListNode swapPairs(ListNode head) {
    3. if(head == null) return null;
    4. // 要有两个变量
    5. //一个用来指向当前的头结点,用来在反转后指向后面的链表
    6. //一个用来传递给下一组要反转的链表
    7. ListNode a, b;
    8. a = b = head;
    9. //1.检查当前链表的结点数还够不够反转
    10. for(int i = 0; i < 2; i++){
    11. if(b == null) return head;
    12. b = b.next;
    13. }
    14. //2.反转当前链表的前2个结点
    15. ListNode newHead = reverseK(a, b);
    16. //3.继续反转下一组链表
    17. a.next = swapPairs(b);
    18. return newHead;
    19. }
    20. public ListNode reverseK(ListNode a, ListNode b){
    21. ListNode prev, cur, nxt;
    22. prev = null; cur = nxt = a;
    23. while(cur!=b){
    24. nxt = cur.next;
    25. cur.next = prev;
    26. prev = cur;
    27. cur = nxt;
    28. }
    29. return prev;
    30. }
    31. }