【优选算法专栏】专题九:链表--------两两交换链表中的节点

简介: 【优选算法专栏】专题九:链表--------两两交换链表中的节点


题目来源

本题来源为:

Leetcode24. 两两交换链表中的节点

题目解析

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

算法原理

本题的算法还是模拟

首先画一下图:

这里我们会发现,要是两两进行交换,会影响四个节点的位置,因此我们要定义四个变量:

画图观察,交换后每个节点的指向就十分明确。

那么什么时候循环结束呢?

分两种情况:

  1. 节点个数为偶数时:

    cur为空时结束循环
  2. 节点个数为奇数时:

    next为空时,循环结束

代码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution 
{
public:
    ListNode* swapPairs(ListNode* head) 
    {
        //当传入的链表为空或者一个节点时,直接返回
        if(head==nullptr||head->next==nullptr)
        return head;
        //创建虚拟头节点
        ListNode* newhead=new ListNode(0);
        newhead->next=head;
        //定义变量
        ListNode*prev=newhead,*cur=prev->next,*next=cur->next,*nnext=next->next;
        while(cur&&next)
        {
            //交换节点:
            prev->next=next;
            next->next=cur;
            cur->next=nnext;
            //修改节点:
            prev=cur;
            cur=nnext;
            //注意非法访问
            if(cur)
            next=cur->next;
            if(next)
            nnext=next->next;
        }
        cur=newhead->next;
        delete newhead;
        return cur;
    }
};
相关文章
|
20天前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
20天前
|
机器学习/深度学习 算法 C语言
【C/数据结构与算法】:10道链表经典OJ
【C/数据结构与算法】:10道链表经典OJ
12 1
|
28天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
18 2
|
19天前
|
算法 Java
Java数据结构与算法:双向链表
Java数据结构与算法:双向链表
|
19天前
|
算法 Java
Java数据结构与算法:循环链表
Java数据结构与算法:循环链表
|
19天前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
19天前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
|
19天前
|
算法
【数据结构与算法 经典例题】随机链表的复制(图文详解)
【数据结构与算法 经典例题】随机链表的复制(图文详解)
|
19天前
|
算法 C语言
【数据结构与算法 经典例题】链表的回文结构(图文详解)
【数据结构与算法 经典例题】链表的回文结构(图文详解)
|
19天前
|
算法
【数据结构与算法 经典例题】反转链表(图文详解)
【数据结构与算法 经典例题】反转链表(图文详解)