leetcode.24. 两两交换链表中的节点

题目

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

思路

创建虚拟头节点,画图,确认步骤。

实现

java 复制代码
/**
 * 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 || head.next == null) return head;
      
       ListNode dummy = new ListNode(0);
       ListNode p = dummy;
       dummy.next = head;
       ListNode i = head;
       ListNode j = head.next;

       // i 是第一个节点 j是第二个节点
      
      //一轮下来 i!=null 且 j != null 就可以进行循环
       while(i !=null && j != null){
         
         ListNode temp = j.next;


         //实际的交换步骤
         p.next = j;
         j.next = i;
         i.next = temp;

          
         p = i;
         i = temp;
         //这里是为了防止下面出现NPE。
         //当移动指针准备下一轮循环的时候,发现第一个已经是null,可以直接返回退出循环了
         if(i == null){
            continue;
         }
         j = temp.next;
       }

       return dummy.next;
    }
}
相关推荐
好易学·数据结构8 小时前
可视化图解算法56:岛屿数量
数据结构·算法·leetcode·力扣·回溯·牛客网
Ashlee_code14 小时前
裂变时刻:全球关税重构下的券商交易系统跃迁路线图(2025-2027)
java·大数据·数据结构·python·云原生·区块链·perl
闻缺陷则喜何志丹15 小时前
【带权的并集查找】 P9235 [蓝桥杯 2023 省 A] 网络稳定性|省选-
数据结构·c++·蓝桥杯·洛谷·并集查找
jie*15 小时前
python(one day)——春水碧于天,画船听雨眠。
开发语言·数据结构·python·算法·线性回归
草莓熊Lotso16 小时前
【LeetCode刷题指南】--数组串联,合并两个有序数组,删除有序数组中的重复项
c语言·数据结构·其他·刷题
weixin_4196583116 小时前
数据结构之B-树
java·数据结构·b树
H_HX_xL_L16 小时前
数据结构的算法分析与线性表<1>
数据结构·算法
overFitBrain16 小时前
数据结构-2(链表)
数据结构
xienda16 小时前
数据结构排序算法总结(C语言实现)
数据结构·算法·排序算法
科大饭桶17 小时前
数据结构自学Day8: 堆的排序以及TopK问题
数据结构·c++·算法·leetcode·二叉树·c