首页 > 其他分享 >链表-查找结点

链表-查找结点

时间:2024-12-12 22:03:06浏览次数:6  
标签:node char 结点 struct head 链表 查找 NULL

 链表好难啊! 理解了尾差法但是却无法写出完整代码.

题目描述

设计函数int  locate (struct node * head,char x);,找到以head为头指针的链表中,数据域的值等于x的结点,并返回该结点的序号(即是第几个结点)。

输入

一行包含#的字符串,将以#前的每个字符为数据域的值创建多个结点,并将这些结点,利用尾插法链接成链表。
#后还有一个字符,表示要在链表中查找数据域值为该字符的结点。

输出

所查找到的结点的序号。如果找不到这样的结点,则输出0。

样例输入

ABCDEF#D

样例输出

4

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node
{
    char data;
    struct node *next;
};

int locate(struct node * head, char x);
void destroy(struct node* head);
struct node* tailinsert();

main()
{   char c;
    struct node *head;
    head=tailinsert();  
    c=getchar();
    printf("%d",locate(head,c));       
    destroy(head);
}

struct node* tailinsert()
{  
    @@1

    @@1 
    return head;
}


int locate(struct node * head, char x)
{
    struct node  *p=head;
    int i, n = 0;
    while(@#1) //如果链表中还有未扫描过的结点
    {
          @@2

          @@2
    }
    return 0;
}

void destroy(struct node* head)
{   
    struct node *p;
    while(head!=NULL)
    {
        p = head;             //p指向要销毁的结点
        head = head ->next;   //head指向再下一个要销毁的结点
        free(p);               //销毁p指向的结点
    }
}

答案

#include <stdio.h>
#include<string.h>
#include <stdlib.h>
struct node
{
    char data;
    struct node* next;
};

int locate(struct node* head, char x);
void destroy(struct node* head);
struct node* tailinsert();

main()
{
    char c;
    struct node* head;
    head = tailinsert();
    c = getchar();
    printf("%d", locate(head, c));
    destroy(head);
}

struct node* tailinsert()
{
    struct node* head,*p,*q;
    char ch;
    head = NULL;
    q = NULL;
    p = NULL;
    while (ch=getchar(),ch!='#')
    {
        p = (struct node*)malloc(sizeof(struct node));
        p->data = ch;
        p->next = NULL;
        if (head == NULL)
        {
            head = p;
            q = p;
        }
        else
        {
            q->next = p;
            q = p;
        }
    }
    
        return head;
}


int locate(struct node* head, char x)
{
    struct node* p = head;
    int i, n = 0;
    while (p!=NULL) //如果链表中还有未扫描过的结点
    {
        n++;
        if (p->data == x)
            return n;
        p = p->next;
    }
    return 0;
}

void destroy(struct node* head)
{
    struct node* p;
    while (head != NULL)
    {
        p = head;             //p指向要销毁的结点
        head = head->next;   //head指向再下一个要销毁的结点
        free(p);               //销毁p指向的结点
    }
}

标签:node,char,结点,struct,head,链表,查找,NULL
From: https://blog.csdn.net/ssssswwzm/article/details/144437026

相关文章

  • 搞定leetcode面试经典150题之链表
    系列博客目录文章目录系列博客目录理论知识双向链表例题206.反转链表27.回文链表141.环形链表21.合并有序链表2.两数相加19.删除链表的倒数第N个结点138.随机链表的复制理论知识链表是数据结构中一种非常常见且基础的结构,在Java中,链表被广泛应用于解决动态......
  • 链表的一步步实现(需有一部分c语言基础)【缓慢更新中
    链表的一步步实现(需有一部分c语言基础)(由于本人上课实在没学懂链表的具体实现步骤,于是写下这篇博客记录学习过程,有兴趣的新手也可以跟着学习1.认识链表的结构&创建简单静态链表并输出数据Q:什么是链表?A:链表是由一系列节点组成,每个节点包含两个域,一个是数据域,用来保存数据,另外一......
  • Linux中利用find命令查找包含对应字符串的文件
    在Linux中,find命令通常用于查找文件系统中的文件和目录,而不是直接用于查找文本中的字符串。如果您想要在一组文件中查找包含特定字符串的文件,您可以结合使用find命令和grep命令来实现。以下是一些使用find和grep组合来查找包含特定字符串的文件的例子:在当前目录及子目录中查找......
  • 一张图教会你查找函数
    大家好,我是小鱼。一张图给你教明白:这个函数是一个查找函数,它的作用是当我们给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找的值。结合给的图片中的例子来做说明:我们看一下这张图,表一是一些人的信息,我们想要在表2中自动找到乙的年龄。第1部分:lookup_valu......
  • 二分查找(灵神思路,区间范围)
    classSolution{public:intlower(vector&nums,inttarget){intn=nums.size();intleft=0;intright=n-1;while(left<=right){intmid=left+(right-left)/2;if(nums[mid]<target){left=mid+1;}elseif(nums[mid]>=target){right=mid-1;}}retu......
  • 二分查找第一个出现target的位置(不断左偏移)
    includeincludeusingnamespacestd;intbinarySearchFirstOccurrence(vector&nums,inttarget){intleft=0;intright=nums.size()-1;intresult=-1;while(left<=right){intmid=left+(right-left)/2;if(nums[mid]==target){r......
  • 数据结构与算法之美:再谈单链表(进阶)
            Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!我的博客:<但凡.我的专栏:《数据结构与算法之美》、《编程之路》、《题海拾贝》欢迎点赞,关注! 目录 1、使用C++实现单链表1.1节点的声明1.2节点的初始化1.3头插和尾插1.3.1头插......
  • 链表(头插法)
    利用头插法,创建类似下图所示的动态链表,其中结点数据域由键盘输入而确定。要创建下图的链表,输入的依次是DCBA。创建好链表后,还需要依次访问各个结点,输出各个结点的数据域。输入 1行,4个字符输出4个字符,次序与输入相反,中间用空格分隔。样例输入XYUW样例输出WUYX#inc......
  • 合并两个有序链表
    力扣链接:21.合并两个有序链表-力扣(LeetCode)将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=......
  • 【数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
    目录......