LeetCode(两两交换链表中的节点)

张开发
2026/4/16 22:43:35 15 分钟阅读

分享文章

LeetCode(两两交换链表中的节点)
题目链接https://leetcode.cn/problems/swap-nodes-in-pairs/题目描述给你一个链表两两交换其中相邻的节点并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题即只能进行节点交换。示例 1输入head [1,2,3,4]输出[2,1,4,3]示例 2输入head []输出[]示例 3输入head [1]输出[1]提示链表中节点的数目在范围[0, 100]内0 Node.val 100思路/** * 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){ //申请虚拟头结点 ListNode* newheadnew ListNode(0); newhead-nexthead; ListNode* curnewhead; while(cur-nextcur-next-next){//至少有两个有效结点才能交换 ListNode* pcur-next;//第一个节点 ListNode* qcur-next-next;//第二个节点 //原始链表的第二结点变成新链表的头结点 cur-nextq; //先把后续节点连到原来头结点身上 p-nextq-next; //原始链表的头结点变成新链表的第二个结点 q-nextp; //让虚拟头结点移动到新链表第二节点的位置开始新一轮 curp; } return newhead-next; } return NULL; } };

更多文章