day16 leetcode-hot100-30(链表9)
24. 两两交换链表中的节点 - 力扣(LeetCode)
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;}
}