两两交换链表中的节点
现在时间是: 2023年11月18日 星期六 农历十月初六 22:08:
每天坚持刷Leetcode,遇到有些突然看到就不能想得很清楚的题目,还是需要进行记录一下!
Leetcode热题100(学习计划):两两交换链表中的节点,题目信息如下:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
题目信息如上:
我的想法是,本道题目打直球,没有什么算法思维,就是需要控制好边界条件,以及创立一些节点:
在设计算法思路的时候,主要就是设定好相关的begin和end节点即可,代码展示如下:
/** * 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) return nullptr; //不修改节点内部的值,即交换两个节点 ListNode* node = new ListNode(0); node->next = head; ListNode* s = node; while(head != nullptr && head->next != nullptr){ //交换节点 ListNode* cur = head->next->next; ListNode* pre = head->next; pre->next = head; head->next = cur; s->next = pre; s = head; head = head->next; } return node->next; } };