在单链表中查找一个节点如何操作,查找链表是否存在一个节点

首页 > 经验 > 作者:YD1662022-11-04 00:24:09

单链表中的头结点

【首元结点、头指针和头节点的概念】

在单链表中查找一个节点如何操作,查找链表是否存在一个节点(5)

【链表增加头结点的作用】

单链表的初始化

创建头结点,其指针域指向空。

【算法代码】

LinkedList LinkedListInit() { LinkedListNode* header = (LinkedListNode*)malloc(sizeof(LinkedListNode)); if (nullptr == header) { cout << "创建链表头失败" << endl; return nullptr; } header->data = 0; header->next = nullptr; return header; }单链表的创建

单链表和顺序表不同,它是一种动态结构。整个可用存储空间可为多个链表共同享用,每个链表占用的空间不需预先分配划定,而是由系统按需即时生成。因此,建立线性表的链式存储结构的过程就是一个动态生成链表的过程。从空表的初始状态开始,依次建立各元素的结点,并逐个插入链表。根据结点插入位置的不同,链表的创建方法可以分为头插法和尾插法。

【头插法】

头插法是指每次申请一个新结点,读入相应的数据元素值,然后将新结点从链表的头部之后逐个插入。如图所示,每次将s所指结点插在最前端:

在单链表中查找一个节点如何操作,查找链表是否存在一个节点(6)

如图所示为线性表(a, b, c, d, e)采用头插法的创建过程。因为每次插入在链表的头部,所以应该逆位序输入数据,依次输入e、d、c、b、a, 输入顺序和线性表中的逻辑顺序是相反的。

在单链表中查找一个节点如何操作,查找链表是否存在一个节点(7)

【算法代码】

LinkedList LinkedListCreateByHeader(LinkedList slist, ElemType elem) { if (nullptr == slist) { cout << "链表未初始化" << endl; return nullptr; } else { LinkedListNode* header = slist; LinkedListNode* node = (LinkedListNode*)malloc(sizeof(LinkedListNode)); if (nullptr == node) { cout << "创建结点失败" << endl; return nullptr; } else { node->data = elem; node->next = header->next; header->next = node; return header; } } }

釆用头插法建立单链表,读入数据的顺序与生成的链表中元素的顺序是相反的。每个结点插入的时间为,设单链表长为n,则总的时间复杂度为。

【尾插法】

头插法建立单链表的算法虽然简单,但生成的链表中结点的次序与输入数据的顺序相反。尾插法是通过将新结点逐个插入到链表的尾部来创建链表。同头插法一样,每次申请一个新结点,读入相应的数据元素值。不同的是,为了使新结点能插入到链表尾部,必须增加一个尾指针r, 使其始终指向当前链表的尾结点,如图所示:

在单链表中查找一个节点如何操作,查找链表是否存在一个节点(8)

上一页123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.