当前位置: 首页 > wzjs >正文

台州做网站公司谷歌搜索引擎下载

台州做网站公司,谷歌搜索引擎下载,网站开发电子发票,响应式制作网站建设以下是整理成详细CSDN文档的格式,用于解释如何两两交换链表中的节点: 两两交换链表中的节点 题目描述示例示例 1示例 2示例 3 提示初始思路代码实现参考官方教程思路总结 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交…

以下是整理成详细CSDN文档的格式,用于解释如何两两交换链表中的节点:


两两交换链表中的节点

    • 题目描述
    • 示例
      • 示例 1
      • 示例 2
      • 示例 3
    • 提示
    • 初始思路
    • 代码实现
    • 参考官方教程思路
    • 总结

题目描述

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

示例

示例 1

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

示例 2

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

示例 3

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

提示

链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100

初始思路

对于这个问题,我们可以通过迭代的方式进行节点交换。首先检查当前节点和下一个节点是否存在,如果存在,则交换这两个节点。然后继续检查下一个节点对,直到链表结束。

代码实现

以下是使用C语言实现的代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* swapPairs(struct ListNode* head) {// 如果链表为空或者只有一个节点,不需要交换,直接返回头节点if (head == NULL || head->next == NULL) {return head;}// 初始化first指针指向第一个节点,second指针指向第二个节点struct ListNode* first = head;struct ListNode* second = head->next;// third指针指向第二个节点的下一个节点,即下一个待交换的节点对中的第一个节点struct ListNode* third = head->next->next;// 交换first和second节点:将first的next指向third,second的next指向first,然后更新头节点为secondfirst->next = third;second->next = first;head = second;// 初始化current指针,用于遍历链表,寻找需要交换的节点对struct ListNode* current = first;// 遍历链表,交换节点对while (current->next != NULL && current->next->next != NULL) {// 定位到下一个需要交换的节点对first = current->next;second = current->next->next;third = second->next; // third指向second的下一个节点// 执行节点交换:将current的next指向second,first的next指向third,second的next指向firstcurrent->next = second;first->next = third;second->next = first;// 移动current指针到下一个节点对的第一个节点,继续循环current = first;}// 返回交换后的链表头节点return head;
}

参考官方教程思路

为了简化问题,我们可以使用一个虚拟头节点(dummy head),这样可以使边界情况的处理更加简单。以下是使用C语言实现的代码:

#include <stdlib.h> // 引入stdlib.h头文件以使用malloc函数/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* swapPairs(struct ListNode* head) {// 创建一个虚拟头节点dummyHead,其next指向实际的头节点head// 使用虚拟头节点可以简化对头节点交换的处理struct ListNode* dummyHead = malloc(sizeof(struct ListNode)); // 动态分配内存dummyHead->next = head; // 将虚拟头节点的next指向实际的头节点struct ListNode* temp = dummyHead; // 使用temp指针遍历链表// 遍历链表,寻找需要交换的节点对while (temp->next != NULL && temp->next->next != NULL) {// first指向当前节点对的第一个节点struct ListNode* first = temp->next;// second指向当前节点对的第二个节点struct ListNode* second = temp->next->next;// 交换节点对的步骤:// 1. 将temp的next指向second,即当前节点对的第二个节点temp->next = second;// 2. 将first的next指向second的next,即跳过second,指向下一个节点对的第一个节点first->next = second->next;// 3. 将second的next指向first,完成两个节点的交换second->next = first;// 将temp向前移动到下一个节点对的第一个节点,继续循环temp = first;}// 返回虚拟头节点的下一个节点,即交换后的链表头节点// 由于dummyHead是一个虚拟节点,不包含在最终的链表中,所以返回dummyHead->nextreturn dummyHead->next;
}

注意:在使用malloc函数时,需要确保在程序结束前释放分配的内存,以避免内存泄漏。在这个函数中,由于dummyHead是一个局部变量,它的内存会在函数返回后自动释放。

总结

通过以上代码,我们可以成功地两两交换链表中的节点。这个问题主要考察了链表的操作和指针的使用,通过迭代的方式可以方便地实现节点的交换。

http://www.dtcms.com/wzjs/507322.html

相关文章:

  • 自己建网站怎么做seo百度 seo排名查询
  • 微信网站用什么做的国外网站搭建
  • 昆明制作网站费用软件测试培训机构哪家好
  • 云服务器网站搭建长沙官网seo收费
  • 最新网站建设常见问题郑州网站技术顾问
  • 上海免费网站建设模板推荐三亚百度推广地址
  • 平板购物网站建设怎么网上宣传自己的产品
  • 武汉网站建设多少钱今日头条热点新闻
  • 苏州画廊网站建设最经典最常用的网站推广方式
  • ps做网站素材文件打包seo体系
  • 北京网站开发网站建设报价如何建立个人网址
  • 做网站要用到哪些架包全渠道营销案例
  • 刷手机网站关键词seo公司推荐推广平台
  • 做详情图的网站网络营销的概念与含义
  • 上海网站建设caiyiduo百度站内搜索
  • 做网站时图片要切片有什么作用东莞seo技术
  • 用php建设一个简单的网站seo权重优化软件
  • 高端网站建设南宁桂林网站优化
  • 营销型网站框架百度地图排名怎么优化
  • 免费做公众号的网站百度百科官网
  • 免费的seo网站膝商丘关键词优化推广
  • 上海app外包免费seo快速收录工具
  • 平台b2c网站建设北京seo地址
  • 北京网站开开发公司电话seo销售是做什么的
  • 中企动力济南分公司seo关键词排名优化方案
  • 网站开发及应用今天最新消息
  • 网站多多sem 优化价格
  • 视频背景做网站背景合肥网络推广营销
  • 购物网站优化的建议免费打广告平台有哪些
  • 最近三天的新闻大事摘抄优化关键词哪家好