力扣题24两两交换链表中的节点
发布日期:2022-03-04 11:48:25 浏览次数:1 分类:技术文章

本文共 1114 字,大约阅读时间需要 3 分钟。

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:

输入:head = []
输出:[]
示例 3:

输入:head = [1]
输出:[1]

1.链表的题目,一般都会自己手动加一个哨兵头节点,这样就不需要对头节点这种特殊情况进行判断,方便很多。然后就是链表中经常使用多指针方法,需要画出关系图,针对每个节点的执向要弄清楚,对指针的更新也要注意空指针异常的问题。

/** * 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 newHead = new ListNode(0);//创建一个哨兵头节点
newHead.next = head;
ListNode pre = newHead;
ListNode first = head;
ListNode second = head.next;
while (first != null && second != null) {
//修改节点间关系,注意要防止节点的丢失
ListNode temp1 = pre.next;
ListNode temp2 = second.next;
pre.next = second;
second.next = temp1;
temp1.next = temp2;
//更新指针
pre = temp1;
//注意对空指针的判断
if (pre.next == null || pre.next.next == null) {
break;
}
 first = pre.next;
second = pre.next.next;
}
return newHead.next;
}}

题源:

转载地址:https://blog.csdn.net/xxyneymar/article/details/122567488 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SpringBoot入门(四)请求参数处理(一)
下一篇:SpringBoot入门(五)请求参数处理(二)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.36.149.54]2022年07月29日 06时49分09秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章