目录

leetcode-hot-100-24两两交换链表中的节点

【leetcode hot 100 24】两两交换链表中的节点

解法一:先判断链表是否为空,若为空则直接返回;否则用 leftright 指向第一个和第二个节点,当这两个节点非空时一直执行交换。其中先判断 right.next==null ,说明链表为偶数且已经交换完 break ;再判断 right.next.next==null ,说明链表为奇数且已经交换完 break ;否则重新设置 leftright 继续循环。

/**
 * 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) {
        if (head == null){
            return head;
        }
        ListNode left=head, right=head.next;
        while(left!=null && right!=null){
            int temp = left.val;
            left.val = right.val;
            right.val = temp;
            if(right.next==null){
                break;
            }
            if(right.next.next==null){
                break;
            }
            left = right.next;
            right = left.next;
        }
        return head;
    }
}

注意:

  • 先判断链表是否为空,若为空则直接返回
  • left!=null && right!=null ,则一直交换
  • 先判断 right.next==null ,说明链表为偶数且已经交换完 break ;再判断 right.next.next==null ,说明链表为奇数且已经交换完 break ;否则重新设置 leftright 继续循环。