day16 leetcode-hot100-30(链表9)

24. 两两交换链表中的节点 - 力扣(LeetCode)

day16 leetcode-hot100-30(链表9)_第1张图片

1.模拟法

思路

模拟题目要求进行两两交换,但有一点需要注意,比如交换3与4后,1仍然指的是3,这是不正确的,所以1指针的next也需要修改,所以每次模拟是操作3个节点。

具体思路

(1)创建哨兵节点dump,减少除了头节点这个特殊情况,dump用于返回,再创建temp进行模拟。

(2)当temp.next与temp.next.next只要有一个为null就不进行循环。

(3)修改n1,n2,temp的next,使其满足要求,先让n1指向n2.next,防止节点丢失。

具体代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dump = new ListNode(0,head);
        ListNode temp = dump;
        while(temp.next!=null && temp.next.next!=null){
            ListNode n1 =temp.next;
            ListNode n2 =temp.next.next;
            n1.next=n2.next;
            n2.next=n1;
            temp.next=n2;
            temp=n1;
        }
        return dump.next;

    }
}

你可能感兴趣的:(leetcode,链表,算法)