C语言,如何按值查找,然后返回这个值在链表中的位置?
typedef struct LNode
{
    int data;
    struct LNode* next;
}LNode,*LinkList;

LinkList LocalElem(LinkList a,int e)
{
    LNode* p=a->next;
    int i=1;
    while(p!=NULL && p->data!=e)
    {

        if(p->data==e)
        {
            return i;
        }
        i++;
        p=p->next;
    }

    return p;
}

int main()
{
    LNode a;
    LinkList p;

      printf("\n");
    p=LocalElem(p,1);
    if(p!=NULL)
    {
        printf("%d\n",i);
    }

        return 0;

输出后怎么总是出来一个8,请问要怎么改???(代码里面省略了创建链表的部分)

c
-1

2个回答

没看懂弄个链表,怎么问的是输出指针值,单纯输出指针的值就是解引用 *p 就是了

0

LinkList l = LocalElem(你的链表, 要找的元素);
if (l != NULL) printf("%d", l->data);

0
weixin_42488395
小道枝 回复caozhy: 好的,非常感谢!
9 个月之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复weixin_42488395: 说明你最后一个节点不是null,而且data也没有找到,怀疑你初始化和输入数据的代码都不对
9 个月之前 回复
weixin_42488395
小道枝 照着这样改后数出来是一串数字,我更新了问题里面的代码,能再帮我看看哪里错了吗
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
单链表按值和按序号查找
#include<malloc.h>;#include<stdio.h>;typedef struct node{     int data;     struct node *next;}NODE; NODE *locate(NODE *head,int value){   /*按值查找*/       NODE *p;      p=head->next;  ...
线性链表尾插法及查找第i位的值 (完整代码)
单链表的创建(尾插法):首先创建一个头指针,在创建一个循环进行赋值,链接。void creat(linklist &l) 查找链表第i位的值:将第i个元素赋值给e,若不存在第i个元素返回-1。 status getelem_l(linklist l,int i,elemtype &e)  代码实现: //创建单链表及查找第i位的值 #include <stdio.h...
单链表的功能使用:初始化,赋值,输出,删除,按值查找,按地址查找,数据修改
#include #include typedef struct Node* A; struct Node { A next; int value; }; int init(A *head);                                                        //单链表初始化 int insert(A head, int x);  
C语言:单链表查找其中节点的数据
#include #include #define MAX 10 struct List { int number; int total; struct List *next; }; typedef struct List Node; typedef Node *Link; int data[2][MAX] = {3, 9, 25, 5, 7, 26, 56, 80, 2, 6
链表节点查找
在一个非空单向链表中(数据域的值没有重复)找到值为key的节点, 找到则返回节点的地址,否则返回nullElemSN* FindNode(ElemSN *h,int key) { ElemSN *p; for (p = h; p; p = p->next) { if (p->data == key) { break;
C语言—链表的查找
链表的查找的基本思路 我们以后想要得到的插入和删除,都是建立在链表的查找之上,如果你想删除或者插入但是你却连位置都没有,这就很尴尬了,所以链表查找我觉得挺重要的,也是挺难理解的,因为只要理解这个后面的插入和删除功能,你自己很快就写出来了,
链表输出某一位置的值以及该位置
#include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int status; typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; void
面试题——查找单链表的中间节点
链表是基本的数据结构之一,面试题中链表占很大一部分,可见链表操作是非常重要的。我对一些常见的链表操作进行的归纳。        下面的问题为:查找单链表的中间节点。题目分析:       链表的特点就是有很多的节点,每个节点有数据域和指针域两部分,指针域存放的是下一个节点的地址,根据地址找到下一个节点。链表只能从前到后遍历,不能从后到前遍历。       对于这个问题,我们首先能够想到的就是先遍历
C语言数据结构之如何快速查找链表的中间节点
腾讯面试题:如何快速查找指定链表的中间节点?解法1:遍历法。    先遍历一遍统计链表长度,然后再遍历长度的1/2便即是中间节点。    时间复杂度O(3n/2)解法2:快慢指针。(推荐)    设置两个指向链表头结点的指针,一个指针的遍历速度是另一个指针的2倍,当快的指针遍历完毕,慢指针即是中间节点。    时间复杂度O(n/2)解法二比解法一速度快了足足3倍,可见算法的威力。解法二代码:Lin...
链表中找最大值
typedef struct { int data; Node *next; Node *prev; }Node; int find_max(Node *phead) { assert(phead != NULL); Node *p = phead->next; int max = p->data; while(p->next != phead->next) {
双向链表的功能实现:初始化,插入,按位置插入,按位置删除,按值删除,遍历打印等
#include #include #define F -1 typedef struct Node* node; struct Node { node prior; node next; int value; }; int init(node *head);                                          //初始化 int insert
单链表操作之查找中间结点
***单链表操作之查找中间结点*** //查找链表的中间结点; //自定义的结点结构体和头指针结构体: #include #include #include #include typedef int DataType; typedef struct LinkNode { DataType data; struct LinkNode* n
单链表元素定位(输出链表中元素的下标)
#include #include #include using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int El
查找链表中倒数第k个节点,若查找成功,返回数据域的值
有两种思路: 思路一:首先遍历一遍链表,得到链表长度n,然后返回n-k+1个节点的数据域 思路二:定义两个指针p和q,都指向头节点的下一个节点,等到p移动到第k个节点,q和p同步移动,等到p移动到链表尾时,q指向的就是倒数第k个节点 思路一相当于遍历两遍链表,思路二则遍历了一遍链表,思路二更优 //找链表中倒数第k个位置上的节点,若查找成功,返回data域的值 //思路:首先遍历一遍链表
链表初识(二):找到链表中第一个含有某值的节点并删除该节点
由于链表的内存不是一次性分配的,因而无法保证链表的内存和数组一样是连续的。如果想查找某一个节点,则只有从头节点开始遍历,其时间效率为O(n);在数组中可根据下标来找到目标的元素,其时间效率为O(1); 如果想要找到某一节点的值或者某个数组位置存储的值,则时间效率都为O(n); 代码以及相关说明如下: /** * 删除链表中的某一节点 * * @param...
[C语言]查找链表的中间元素
查找链表的中间元素,最简便的方法之一,就是先遍历一遍链表,得到链表长度,再根据长度遍历得到中间的元素。我这里用的是快慢指针去查找,只需要遍历一次即可,快指针每次走两步,慢指针每次走一步,当快指针走完了,慢指针所指位置即中间元素的位置,具体实现如下C代码实现struct ListNode { int val; struct ListNode *next; };/* ** 若链表元素为奇
C语言——链表(二)之数据的查找、插入与删除节点
 查找包含指定的数的节点: node* findData(int n, node *head){ node *curNode=head; while(curNode){ if(curNode->data==n){ printf("Find %d in the list.",n); return curNode...
查找链表中值最大的节点
递归的方式查找链表中值最大的节点,用于交流学习。
单链表的查找(完整程序 以字符串为数据)
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> #define N 3 typedef struct node { char name[20]; struct node *next; }stud;stud *creat(int n) { stud *p,*h,*s;
java实现单链表(增加节点,删除节点,根据下标获取节点,获取链表大小,链表逆序)
最近面试被问到链表的问题很多,让自己写一个链表,并实现链表逆序,自己突然发现,用java实现链表还真是一件费时的事情,更何况笔试那点时间。现在做一下记录,如果有错误,希望看见的人能指出,谢谢。 定义一个Node节点: public class Node { Node next; //下一个节点的引用 Object obj; //节点元素 public Node(Object
单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
SinglyLinkedCirculayList.h #include "stdafx.h" #include "iostream" using namespace std; typedef struct LNode { int data; struct LNode *next; }LNode, *LinkedList; //创建链表 bool createLinkedList(Linked
C语言链表初试(输出链表中的数、删除某个数)
主体代码#include<stdio.h> #include<stdlib.h>typedef struct _node{ int value; struct _node *pointer; }node;typedef struct _package{ node *head; }package;void linked_list(package *package); //创造
将链表中数据域为key 的节点删除(链表有重复值)
算法思路: 链表中数据域为key 的节点可能是头结点,和中间尾节点。要分别进行讨论。 删除链表的头结点: 挪头指针, 将节点删除, 将原来指向删除节点的指针指向现在的头结点 删除链表的中间尾节点: 将要删除的链表节点从链表中移除 删掉要删除的节点 将原来指向删除节点的指针指向新位置 注意: 使用两指针联动进行遍历链
单链表的基本操作头插法尾插法创建插入删除遍历
单链表的基本操作,单链表头插法、尾插法、创建、插入、删除、遍历
查找链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 难点: 不能回退,不知道倒数第k个节点是顺数的第几个节点。 思路:让两个节点保持k的距离,如果最后一个节点到达链表末尾,第二个节点也就到了k的位置。---这叫做窗口概念。 class Window(){ public int first; public int last; ...
输出单链表中指定位置元素
尾插法建立单链表后,输出整个链表元素,并输出指定位置元素 #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #include&amp;lt;time.h&amp;gt; typedef struct Node { int num; struct Node *next; }Node; void print(Node L) //输出全部链表元素 { ...
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ class Solution { public: vector&amp;lt;in...
Java单链表基本操作(一)--顺序查找
本系列博文,将围绕一下几个方面: Java单链表基本操作: (一)顺序查找; (二)指定位置增加节点; (三)删除当前节点; (四)单链表反转; (五)输出倒数第K个节点; (六)删除重复节点; (七)合并两个排序单链表; (八)交换相邻节点的值;本节讲述最基础的顺序查找,主要熟悉一下单链表的属性和基本操作。/* * 查找值为num的元素位置,没有返回-1*/ public cl
C语言实现链表的插入、删除、查询操作
前言本程序是数据结构上机实验内容,参考《数据结构(C语言版)》(清华大学出版社)中链表部分的伪代码实现。题目要求 设计链表结构体 建立一个链表,并录入n个原始数据 实现向链表中指定位置插入数据的功能 实现删除链表中指定位置的数据的功能 实现获取链表中指定位置的数据的功能 使用malloc函数动态分配内存地址 实例代码及说明#include <stdio.h> #include <stdlib.h>#
链表基本操作(创建,插入,查找,删除)-C语言
Demo地址:https://github.com/RainManGO/NodeLink     工具:Xcode //   // main.c   // Node   //   // Created by apple on 2018/1/3.   // Copyright © 20
单链表上查找算法的实现
建立一个长度为n的带头结点的单链表,在该表中寻找第i个结点,若找到,则输出ok,否则输出error。处理数据类型为整型。Description第一行为链表的长度n; 第二行为链表中的数据元素; 第三行为要找的结点i。Input找到就输出ok,没找到就输出error。Output1234101 2 3 4 5 6 7 8 9 105Sample Input1ok#include using nam
[leetcode]——返回单链表中第k个节点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4,5]) 返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。 注意,我们返回了一个 ListNode 类型的对象 ans,这样: ans.val = 3, ans.next...
刷题-链表-交换相邻节点
题目描述 给定一个链表,交换每两个相邻节点并返回其头部。 例如, Given1-&amp;gt; 2-&amp;gt; 3-&amp;gt; 4,您应该返回列表as2-&amp;gt; 1-&amp;gt; 4-&amp;gt; 3。 你的算法应该只使用恒定的空间。您不能 修改列表中的值,只有节点本身可以​​更改。 使用递归 核心思想: q=p-&amp;gt;next; p-&amp;gt;next=q-&amp;gt;next q-&amp;gt;nex...
数据结构:单链表(五)之链表中寻找一个特定值,返回该节点值指针 回调函数
#if 0----------------------------------------------- - 新增功能:采用回调函数在链表中查找某值,并且返回值指针- ----------------------------------------------- -----------------------------------------------/**链表中寻找一个特定值,返回该节点值指针
C 使用二分法查找指定值在数组中最邻近值的索引
最近需要实现在一个递增或递减数组中查找与指定的数值最临近的数值的功能,记录一下。 大致意思有一个数组array = [0,1,2,3],那我现在有一个数值是1.6,那么1.6与数组中的2最为接近,则返回索引为2。 例示代码如下: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;math.h&amp;gt; #define ARRAY_NUM 8 ...
C语言实现链表之单向链表(九)在任意位置插入结点
C语言实现链表之单向链表(九)在任意位置插入结点     上一篇文章给出了删除尾结点的函数,本篇文章将给出在任意位置插入结点的函数。 /*============================================================================== * 操作 :在任意位置插入结点 * 操作前:pHeadNode为链表的头
C语言实现的双链表创建 、插入、删除、指定位置翻转操作的操作
以下代码都是经验证可执行,具体结果可参考 dl_print 打印信息。 代码里面对过程进行了注释便于理解 #include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; #include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt; //定义双向链表的节点结构 typedef struct Node{ int value; struct Node *next; struct Node *pre...
交换单链表相邻的两个节点
给定一个链表,对每两个相邻的结点作交换并返回头节点。例如:给定 1-&amp;gt;2-&amp;gt;3-&amp;gt;4,你应该返回 2-&amp;gt;1-&amp;gt;4-&amp;gt;3。你的算法应该只使用额外的常数空间。不要修改列表中的值,只有节点本身可以​​更改。# Definition for singly-linked list. class ListNode: def __init__(self, x): ...
数据结构之 单链表的基本操作(创建、取值、插入、删除)
单链表的基本操作,创建、取值、插入、删除结点。#include<stdio.h> #include<stdlib.h> #include<stdbool.h> typedef struct LNode{ int data; struct LNode* next; }LNode, *Linklist;//-------------------头插法建立单链表------
C语言实现链表的创建,初始化,插入,删除,查找
#include #include #define OK 0 #define ERROR -1 #define MALLOC_ERROR -2 typedef int ElementType; typedef struct node { ElementType data; // 结点的数据 struct node *next; // 结点