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

题目:leetcode24. 两两交换链表中的节点

描述:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
leetcode24. 两两交换链表中的节点_第1张图片
思路:
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。
接下来就是交换相邻两个元素了,此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序
leetcode24. 两两交换链表中的节点_第2张图片
leetcode24. 两两交换链表中的节点_第3张图片
代码:

class ListNode {
    public int val;
    public ListNode next;

    public ListNode(){};

    public ListNode(int val){ this.val=val;}

    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

public class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head==null ||head.next==null)
            return head;
        ListNode drum=new ListNode(-1);
        drum.next=head;
        ListNode cur=drum,first,second,temp;
        while(cur.next!=null && cur.next.next!=null)
        {
            temp=cur.next.next.next;
            first=cur.next;
            second=cur.next.next;
            cur.next=second;
            second.next=first;
            first.next=temp;
            cur=first;
        }
        return drum.next;
    }
}

你可能感兴趣的:(leetcode刷题,链表,数据结构)