首页 > 其他分享 >【链表操作】前驱和后继

【链表操作】前驱和后继

时间:2024-09-24 22:19:45浏览次数:10  
标签:node head struct 结点 后继 链表 前驱 NULL data

题目描述

设计函数void prevnext(struct node * head, char x);,在以head为头指针的非空链表中,找到数据域值为x的结点,输出该结点的前一个结点和后一个结点的数据域值,如果该结点没有前驱结点(即该结点为第1个结点),则以-1代替,如果该结点没有后继结点(即该结点为尾结点),也以-1代替,如果该结点既是第1个结点也是尾结点(即只有1个结点的链表),则输出2个-1。如果找不到这样的结点,则输出"no node"。

输入

第一行为若干个互不相同的整数,中间用空格分隔,末尾一个整数为-1,以-1前的每个整数为数据域的值创建多个结点,并将这些结点,利用尾插法链接成链表。
第2行为1个整数,表示要查找的结点的数据域的值。

输出

查找到的结点的前驱和后继的数据域值。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct node {
    int data;
    struct node *next;
};

void prevnext(struct node *head, int x);
void destroy(struct node* head);
struct node* creatlink();
void traverse(struct node* head);

int main() {
    int c;
    struct node *head;
    head = creatlink();
    scanf("%d", &c);
    prevnext(head, c);
    destroy(head);
    return 0;
}

void prevnext(struct node *head, int x) {
    struct node *prev, *p;
    p = head;
    prev = NULL;
    while (p!= NULL) {
        if (p->data == x) {
            if (prev == NULL) {
                printf("-1 ");
            } else {
                printf("%d ", prev->data);
            }
            if (p->next == NULL) {
                printf("-1");
            } else {
                printf("%d", p->next->data);
            }
            return;
        }
        prev = p;
        p = p->next;
    }
    printf("no node");
}

struct node* creatlink() {
    struct node* head = NULL;
    int data;
    struct node *p, *q;
    while (1) {
        scanf("%d", &data);
        if (data == -1) break;
        p = (struct node *)malloc(sizeof(struct node));
        p->next = NULL;
        p->data = data;
        q = head;
        if (q == NULL) {
            head = p;
        } else {
            while (q->next!= NULL) {
                q = q->next;
            }
            q->next = p;
        }
    }
    return head;
}

void traverse(struct node* head) {
    struct node *p = head;
    while (p!= NULL) {
        printf("%d ", p->data);
        p = p->next;
    }
}

//销毁链表
void destroy(struct node* head) {
    struct node *p;
    while (head!= NULL) {
        p = head;
        head = head->next;
        free(p);
    }
}

标签:node,head,struct,结点,后继,链表,前驱,NULL,data
From: https://blog.csdn.net/2302_80782671/article/details/142470005

相关文章

  • 简单易懂理解:数仓——拉链表
    1.什么是拉链表拉链表就像衣服的拉链一样重要,实用性非常强,使用频率非常高。所谓的拉链,就是历史记录,记录一个事物的开始到结束所变化的所有信息。“拉链表是一种针对数据仓库设计中表存储数据的方式而定义的数据模型,它有点类似于快照,‌它通过记录每个数据项的生效日期和失效......
  • 链表的回文结构
    对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。测试样例:1->2->2->1返回:true什么是回文?:回文是指从前向后读和从后向前读都相同的字符......
  • 数据结构:单链表
    单链表单链表概念与结构节点链表的性质单链表的打印实现单链表创建新的节点在末尾插入数据在头部插入数据删除尾部数据删除第一个节点在链表中寻找目标数据在指定位置之前插入数据在指定位置之后插⼊数据删除pos结点删除pos之后的结点销毁链表单链表测试单链表概念与......
  • 基础数据结构之链表
    链表1)概述定义在计算机科学中,链表是数据元素的线性集合,其每个元素都指向下一个元素,元素存储上并不连续Incomputerscience,alinkedlistisalinearcollectionofdataelementswhoseorderisnotgivenbytheirphysicalplacementinmemory.Instead,eachelem......
  • c++实现链表单双环链表
    数据结构链表1.链表实质上是一个结构体,包含数据域和指针域,这两个实际上都是一个变量而已,只不过数据域存放的是节点的数据,指针域存放的是下一个节点的地址2.我们新建一个链表节点的时候通常采取的语句类似于NumList*head=(NumList*)malloc(sizeof(NumList)),要注意,......
  • leecode203-移除链表元素
    文章目录题目解题方法1题目给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head......
  • 【PAT_Python解】1025 反转链表
    原题链接:PTA|程序设计类实验辅助教学平台参考资料:1025反转链表(25分)PAT乙级C++/Python版_1025反转链表分数25作者chen,yue单位浙江大学给定一个常数k以及一个-CSDN博客【Python数据结构】反转链表的方法_反转链表python-CSDN博客Python基础算法——反......
  • 数据结构与算法——Java实现 12.习题——合并有序链表
    目录21.合并两个有序链表方法1递归思路方法2迭代思路 完整代码结点类方法 人各有所感,角度不同又怎能感同身受                                                ——24.9.2321.合并两个有序链表将两个......
  • DS循环链表—约瑟夫环
    题目描述N个人坐成一个圆环(编号为1-N),从第S个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。例如:N=3,K=2,S=1。2号先出列,然后是1号,最后剩下的是3号。要求使用循环链表实现。输入测试数据有多组每组包括3个数N、K、S,表示有N个人,从第S个......
  • [Python手撕]判断回文链表
    #Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defisPalindrome(self,head:Optional[ListNode])->bool:deffindmid(he......