首页 > 其他分享 >LeetCode刷题(2)【链表】【合链表&链表的中间结点】(C语言)

LeetCode刷题(2)【链表】【合链表&链表的中间结点】(C语言)

时间:2022-11-17 21:01:08浏览次数:67  
标签:struct next 链表 tail l2 l1 C语言 LeetCode



我的小站——半生瓜のblog


快慢指针问题:

思路:定义一个快指针和一个慢指针,快指针走到结束的时候,慢指针刚好走到一半。

链表的中间结点。

876. 链表的中间结点 - 力扣(LeetCode) (leetcode-cn.com)

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/


struct ListNode* middleNode(struct ListNode* head){
struct ListNode* slow = head;
struct ListNode* fast = head;
while(fast != NULL && fast->next != NULL)
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}

合并两个有有序链表:

​21. 合并两个有序链表 - 力扣(LeetCode) (leetcode-cn.com)​

思路:从头开始取两个链表中小的那个尾插到新链表。

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/


struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
//如果有一个链表是空的,那么直接返回另个一个链表
if(l1 == NULL)
{
return l2;
}
if(l2 == NULL)
{
return l1;
}
//定义一个头指针head和尾指针tail
struct ListNode* head = NULL;
struct ListNode* tail = NULL;
//如果来个两边都不是空链表进入迭代循环
while(l1 != NULL && l2 != NULL)
{
//如果取出来的值l1的小于l2的
if(l1->val < l2->val)
{
//如果新链表是第一次插入
if(tail == NULL)
{
//头尾指针都是l1的这一个元素
head = tail = l1;
}
//如果新链表不是第一次插入
else
{
//新链表的下一个结点是l1这个与元素
tail->next = l1;
//现在的尾巴是传入的这个元素
tail = tail->next;
}
//链表l1的第一个元素往后推移一个
l1 = l1->next;
}
//如果l1的第一个元素大于等于l2的第一个元素
//下面同上
else
{
if(tail == NULL)
{
head = tail = l2;
}
else
{
tail->next = l2;
tail = tail->next;
}
l2 = l2->next;
}
}
//循环结束
//如果链表l1或者链表l2其中的一个还有元素,那么就直接插到后面
if(l1 != NULL)
{
tail->next = l1;
}
if(l2 != NULL)
{
tail->next = l2;
}
return head;
}


标签:struct,next,链表,tail,l2,l1,C语言,LeetCode
From: https://blog.51cto.com/u_15333750/5866168

相关文章

  • LeetCode刷题(3)【链表】【环形链表】&扩展(C语言)
    我的小站——半生瓜のblog环形链表141.环形链表-力扣(LeetCode)(leetcode-cn.com)什么是链表带环:链表的最后一个元素不指向空而指向前面的某个结点。思路:快慢指针,慢指针走......
  • C语言二级错题积累(4)
    在栈中,栈项指针的动态变化决定栈中元素的个数。详细设计的人物是为软件结构体中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。扇......
  • C语言二级错题积累(5)
    常用的连续存储管理技术有固定分区存储管理和可变分区存储管理。程序流程图中带有箭头的线段表示的是控制流。若二叉树没有叶子结点,则为空二叉树。带链栈的栈底指针是随栈的......
  • C语言实现贪吃蛇小程序
    参考视频https://www.bilibili.com/video/BV1LN41197zV?from=search&seid=15462998985727977257代码有点缺陷:1.食物有可能会生成在吃不到的地方2.吃掉食物的音效添加失败//......
  • C语言实现推箱子小游戏
    C语言实现推箱子小游戏包括黑窗和图形界面参考视频https://www.bilibili.com/video/BV1By4y1a79o?t=4428BUG:当人进入到目的地的时候会无法移动。#include<stdio.h>#incl......
  • C语言自定义数据类型
    结构体参考视频:https://www.bilibili.com/video/BV1oi4y1g7CF?p=58大纲:结构体的声明结构体的自引用结构体内存对齐结构体传参结构体实现位段(位段的填充&可移植性)charshor......
  • C语言实现飞翔的小鸟小游戏
    参考视频https://www.bilibili.com/video/BV1Xo4y1R7hs缺陷:撞柱子功能暂未实现//飞翔的小鸟#include<stdio.h>//C语言标准头文件#include<graphics.h>//图形库头文件#includ......
  • C语言实现数字字母雨小程序
    //字母数字雨#include<stdio.h>//随机数头文件#include<stdlib.h>//包含easyX图形库可以使用绘图函数以及鼠标操作#include<graphics.h>#include<conio.h>#defineSTR_SIZ......
  • C语言类型转换
    类型转换类型转换:在C语言中,当一个运算符的几个操作数类型不同时,编译器会在进行运算之前将他们共同转化为某种一样的数据类型,一般来说编译器会先将占用内存较小的数据转化为......
  • C语言简单的猜数字游戏
    #include<stdio.h>#include<stdlib.h>#include<time.h>intmain(void){intnum=0;srand((unsigned)time(NULL));inti=rand();while(scanf("%d",&num)!=EO......