带头节点的单链表练习

2024-05-01 09:32
文章标签 练习 节点 单链 带头

本文主要是介绍带头节点的单链表练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct
{ElemType data;struct LNode *next;
}LNode, *LinkList;void initLink(LinkList L);//初始化头节点
LinkList getLinkHead();//返回一个头节点
void createLink(LinkList L, ElemType *arr, int n);//用长度为n的数组创建链表
void showList(LinkList L, int n);//输出指定长度链表
void showList2(LinkList L);//输出指定节点之后的所有节点//在elem后插入enew,若elem不存在,则在末尾插入
void insertByData(LinkList L, ElemType elem, ElemType enew);
void insertByData2(LinkList L, ElemType elem, ElemType enew);
void insertByData3(LinkList L, ElemType elem, ElemType enew);//倒数第n个元素之前插入enew,若L长度小于n,则插入开头
LNode *insertByIndexEnd(LinkList L, int n, ElemType enew);//将值为负数的结点从L表中删除,并按原次序链接成一个新的单链表NeL
void SeparationNegative(LinkList L, LinkList NeL);//将值为负数的结点删除
void deleteNegative(LinkList L);int main()
{ElemType data[] = { -1, -2, 3, 4, -5, 6, 7, -8, 10 };int length = sizeof(data) / sizeof(ElemType);LinkList L = (LinkList)malloc(sizeof(LinkList)),NeL;initLink(L);createLink(L, data, length);printf("原链表:\t\t\t");showList(L, length);printf("\n");/*printf("\n将值为负数的结点删除:\n");deleteNegative(L);printf("删除后链表:\t\t\t"); showList2(L);*/printf("\n分离链表中的负数:\n");NeL = getLinkHead();SeparationNegative(L, NeL);printf("原链表:\t\t\t"); showList2(L);printf("新链表:\t\t\t"); showList2(NeL);printf("\n");printf("4后插入5:\t\t\t");insertByData3(L, 4, 5);showList2(L);printf("8后插入11:\t\t\t");insertByData3(L, 8, 11);showList2(L);printf("倒数第2个元素之前插入了8:\t");LNode *node4e = insertByIndexEnd(L, 2, 8);showList2(L);printf("\n");system("PAUSE");return 0;
}void deleteNegative(LinkList L)
{LNode *r = L, *p = L->next;while (p){if (p->data < 0){r->next = p->next;free(p);p = r->next;}else{p = p->next;r = r->next;}}
}void SeparationNegative(LinkList L, LinkList NeL)
{LNode *p = L->next, *r = L, *q = NeL;while (p){if (p->data < 0){r->next = p->next;p->next = q->next;q->next = p;p = r->next;q = q->next;}else{r = r->next;p = p->next;}}
}LinkList getLinkHead()
{LinkList L = (LinkList)malloc(sizeof(LinkList));L->data = 0;L->next = NULL;return L;
}void initLink(LinkList L)
{L->data = 0;L->next = NULL;
}void createLink(LinkList L, ElemType *arr, int n)
{LNode *node = NULL;LNode *r = L;int i;for (i = 0; i < n; i++){node = (LNode *)malloc(sizeof(LNode));node->data = arr[i];node->next = r->next;r->next = node;r = r->next;}
}void showList(LinkList L, int n)
{int i;LNode *r = L->next;for (i = 0; i < n; i++){printf("%d ", r->data);r = r->next;}
}void showList2(LinkList L)
{int i;LNode *r = L->next;while (r->next != NULL){printf("%d ", r->data);r = r->next;}printf("%d ", r->data);printf("\n");
}//在elem后插入enew
void insertByData(LinkList L, ElemType elem, ElemType enew)
{int flag = 0;LNode *r = L->next;LNode *p = r;while (r){if (r->data == elem){LNode *node = (LinkList)malloc(sizeof(LNode));node->data = enew;node->next = r->next;r->next = node;flag = 1;break;}else{p = r;//保存最后一个节点的地址r = r->next;}}if (flag == 0){LNode *node = (LinkList)malloc(sizeof(LNode));node->data = enew;node->next = p->next;p->next = node;}
}//在elem后插入enew
void insertByData2(LinkList L, ElemType elem, ElemType enew)
{LNode *r;for (r = L->next; r->next != NULL; r = r->next){if (r->data == elem){LNode *node = (LinkList)malloc(sizeof(LNode));node->data = enew;node->next = r->next;r->next = node;return;}}LNode *node = (LinkList)malloc(sizeof(LNode));node->data = enew;node->next = r->next;r->next = node;
}//在elem后插入enew
void insertByData3(LinkList L, ElemType elem, ElemType enew)
{LNode *r = L->next;while (r){if (r->data == elem || r->next == NULL){LNode *node = (LinkList)malloc(sizeof(LNode));node->data = enew;node->next = r->next;r->next = node;break;}else{r = r->next;}}	
}LNode *insertByIndexEnd(LinkList L, int n, ElemType enew)
{LNode *p = L;LNode *s = L;n++;while (p && n--){p = p->next;}while (p){s = s->next;p = p->next;}LNode *node = (LinkList)malloc(sizeof(LNode));node->data = enew;node->next = s->next;s->next = node;return node;
}

这篇关于带头节点的单链表练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951328

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

JS和jQuery获取节点的兄弟,父级,子级元素

原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素。 <div id="test"><div></div><div></div

Go语言构建单链表

package mainimport "fmt"type ListNode struct {Val intNext *ListNode}func main() {list := []int{2,4,3}head := &ListNode{Val:list[0]}tail := head //需要头尾两个指针for i:=1;i<len(list);i++ {//方法一 数组直接构建链表tai

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优