LeetCode24俩俩交连表中的节点交换问题

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.

分析:交换节点大家都比较会,所以此题的关键是两个组合之间衔接的问题,1组合和2组合之间的衔接通过的是一组合的第一个节点链接二组合第二个节点,故需要一个prev节点保存上一组合的第一个节点的引用。
代码如下:

class Solution {
     
    public ListNode swapPairs(ListNode head) {
     
        if (head == null || head.next == null){
     
            return head;
        }
        ListNode dump = new ListNode(-1);
        dump.next = head;
        ListNode pre = dump;
        while (head != null && head.next != null){
     

            ListNode first = head;
            ListNode two = head.next;

			//交换过程
			//初始第一个节点指向2组合的第二个节点
            pre.next  = two;
            //第一个节点的下一节点指向第二个节点的下一节点,即下一组合的第一节点
            first.next = two.next;
            //第二个节点返指回第一节点
            two.next = first;
            
            //更新节点
            pre = first;
            head = first.next;

        }
        return dump.next;
    }
}

你可能感兴趣的:(Java,java,链表,算法,leetcode,数据结构)