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

建设网站多少钱 郑州重庆seo研究中心

建设网站多少钱 郑州,重庆seo研究中心,大宗商品电子交易平台,网页无法访问手机以下是整理成详细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/143811.html

相关文章:

  • 政府网站开发项目技术总结书百度推广账户搭建
  • 企业做网站推广产品需要多少钱武汉seo搜索引擎
  • 加强企业网站建设的通知怎么做营销
  • 怎样做才能让网站有排名链接点击量软件
  • 中国建设银行余额查询系统百度seo工作室
  • 网站栏目 添加 管理怎样把广告放到百度
  • 昆明网站建设在河科技国外引流推广平台
  • 建设网站怎么賺钱网络舆情分析报告
  • 网站框架布局软文代写发布
  • 专业提供网站建设服务公司深圳网络营销推广
  • 河南郑州疫情最新规定鄞州seo整站优化服务
  • python做网站多少钱介绍产品的营销推文
  • 南通市建设局网站兰州百度推广的公司
  • 社科联网站建设河南企业网站建设
  • 如何做印刷报价网站全球搜索引擎大全
  • 国外做的好的电商网站推荐网站推广外贸
  • 天河wap网站建设公司百度seo公司哪家最好
  • wordpress 如何建站计算机培训课程
  • 建设网站知乎微信管理系统登录入口
  • 网站怎么做seo优化啊昆明网络推广优化
  • wordpress文章美化框seo是指搜索引擎营销
  • 中山做网站拓客平台有哪些
  • 如何做企业网站seo搜索引擎优化工程师招聘
  • 成都网站搭建公司seo黑帽技术
  • 微商水印相机做网站重庆seo主管
  • 便宜的网站设计网络域名综合查询
  • 做网站源码流程新闻今天的最新新闻
  • 用php做电商网站有哪些免费正规的接单平台
  • 一个企业网站ppt怎么做关键词爱站网
  • 合肥企业网站临沂seo建站