【数据结构】链表相关题目(简单版)(一)

简介: 【数据结构】链表相关题目(简单版)(一)

前言


 在学完了顺序表的基本知识后,我们可以通过一些习题来巩固所学知识!


习题1:


删除链表中等于给定值 val 的所有结点。oj链接


d5bda32e23941e8673f2a2889a868c40_37238ee94e2b4209a60265a7a8bf2a2d.png


这道题目有两种做法:


方法一:双指针的遍历,通过双指针来查找删除节点并连接后面的节点,但是缺点就是会有特殊情况需要考虑(头删的情况),代码如下:


979d44e4318330093c1daced7df2e398_21d7f2259fda4fdd9750ce9916689b6b.png


方法2:通过遍历,将节点尾插到新链表,最后返回新链表,代码如下:


struct ListNode* removeElements(struct ListNode* head, int val)
{
    struct ListNode*cur=head,*newnode=NULL,*tail=NULL;
    while(cur)
    {
        if(cur->val!=val)
        {
            if(newnode==NULL)
            {
                newnode=cur;
                tail=cur;
            }
            else
            {
                tail->next=cur;
                tail=tail->next;
            }
          cur=cur->next;
        }
        else
        {
            struct ListNode*next=cur;
            cur=next->next;
            free(next);
        }
    }
if(tail)
{
    tail->next=NULL;
}
  return newnode;
}


习题2


反转一个单链表。oj链接


b10c9575b2e9fc19bc1b1d19b1aded9c_73e6a031c8754f3f96caa48316193590.png


这道题也有两种方法,


方法1:用三指针的方法,前两个来改变每个节点的链接关系,最后一个节点用来标记位置方便遍历链表


64129bae854b58f72088d581cb10d9fd_5532980fc1d34b2cb121ec9a81858d7f.png


代码如下:


a9ee1fe9cb98855347b026d6ea467b99_a19cd8e8352a47ddaaba47163c95066c.png


方法2:取每个节点头插到新链表:


03a9115fb4f28a0b5413ef03feeb57e2_3fafbb1c7ae046fc95650eff20f57151.png

目录
相关文章
|
12天前
|
存储
数据结构第二课 -----线性表之单向链表
数据结构第二课 -----线性表之单向链表
|
2天前
|
存储 算法 Java
数据结构与算法 数组和链表
数据结构与算法 数组和链表
8 0
|
3天前
|
存储 Java
深入浅出数据结构之链表
深入浅出数据结构之链表
|
3天前
|
C++
数据结构(双链表
数据结构(双链表
7 1
|
6天前
|
存储 缓存
[数据结构]~双向+循环链表从(0~1)
[数据结构]~双向+循环链表从(0~1)
|
12天前
|
存储
数据结构第三课 -----线性表之双向链表
数据结构第三课 -----线性表之双向链表
|
13天前
|
存储 Java
数据结构奇妙旅程之顺序表和链表
数据结构奇妙旅程之顺序表和链表
|
17天前
|
存储 C语言
数据结构基础:双链表结构、实现
数据结构基础:双链表结构、实现
|
17天前
|
存储
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
|
20天前
|
C语言
数据结构:5、链表之双向链表
数据结构:5、链表之双向链表
25 0