24. 两两交换链表中的节点

24. 两两交换链表中的节点

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

代码实现

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummyHead = new ListNode(0,head);
        ListNode preNode = dummyHead;
        while(preNode.next != null && preNode.next.next != null){
            ListNode fistNode = preNode.next;
            ListNode nextNode = fistNode.next;
            preNode.next = nextNode;
            fistNode.next = nextNode.next;
            nextNode.next = fistNode;
            preNode = fistNode;
        }
        return dummyHead.next;
    }
}
解题思路
  1. 创建虚拟头节点dummyHead,使得next指针始终指向头节点
  2. 设置preNode 等于 dummyHead,
  3. 开启 while 循环,三步完成一对结点的交换
  4. 使得preNode的next指向下一个需要交换的节点
  5. 继续交换,直到preNode.next为空,或者 preNode.next.next为空
图解
WechatIMG93.jpeg

你可能感兴趣的:(24. 两两交换链表中的节点)