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;
    }
}
相关推荐
JeffersonZU3 分钟前
【数据结构】2-3-2 单链表的插入删除
数据结构
m0_738206548 分钟前
嵌入式学习的第二十二天-数据结构-栈+队列
数据结构·学习
先做个垃圾出来………4 小时前
哈夫曼树(Huffman Tree)
数据结构·算法
Inverse1626 小时前
C语言_动态内存管理
c语言·数据结构·算法
liang_20268 小时前
【HT周赛】T3.二维平面 题解(分块:矩形chkmax,求矩形和)
数据结构·笔记·学习·算法·平面·总结
进击的小白菜8 小时前
LeetCode 153. 寻找旋转排序数组中的最小值:二分查找法详解及高频疑问解析
数据结构·算法·leetcode
士别三日&&当刮目相看9 小时前
数据结构*优先级队列(堆)
java·数据结构
QQ_4376643149 小时前
单向循环链表C语言实现实现(全)
数据结构·windows·链表
ptu小鹏9 小时前
list重点接口及模拟实现
数据结构·c++·list
冲帕Chompa11 小时前
图论part10 bellman_ford算法
数据结构·算法·图论