《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——单向链表
2014-06-14 22:00
323 查看
2014.06.14 21:40
简介:
单向链表应该是绝大多数C语言初学者学会的第一个结构体了。每个节点会指向后续节点,属于顺序结构。由于单链表的实现简单,并且有着明显的限制,使其成为各种天才面试官们虐小朋友的利器(链表的功能实在很有限,而面试官总是要求你用链表完成各种各样的任务,难度就在这儿了)。因此,随手写链表肯定是参加面试的底线了,否则你都没机会动笔就可以回家等消息了。
图示:
实现:
简介:
单向链表应该是绝大多数C语言初学者学会的第一个结构体了。每个节点会指向后续节点,属于顺序结构。由于单链表的实现简单,并且有着明显的限制,使其成为各种天才面试官们虐小朋友的利器(链表的功能实在很有限,而面试官总是要求你用链表完成各种各样的任务,难度就在这儿了)。因此,随手写链表肯定是参加面试的底线了,否则你都没机会动笔就可以回家等消息了。
图示:
实现:
// My implementation for singly linked list. struct ListNode { int val; ListNode *next; ListNode(int _val = 0): val(_val), next(nullptr) {}; }; class SinglyLinkedList { public: SinglyLinkedList() { m_size = 0; m_head = nullptr; m_tail = nullptr; } void insertFront(int val) { if (m_size == 0) { m_head = m_tail = new ListNode(val); } else { ListNode *ptr = new ListNode(val); ptr->next = m_head; m_head = ptr; } ++m_size; } void insertBack(int val) { if (m_size == 0) { m_head = m_tail = new ListNode(val); } else { m_tail->next = new ListNode(val); m_tail = m_tail->next; } ++m_size; } void insertNode(int pos, int val) { int i; if (i <= 0) { insertFront(val); } else if (i >= m_size) { insertBack(val); } else { ListNode *ptr1, *ptr2; ptr1 = m_head; for (i = 0; i < pos - 1; ++i) { ptr1 = ptr1->next; } ptr2 = new ListNode(val); ptr2->next = ptr1->next; ptr1->next = ptr2; ++m_size; } } void deleteNode(int pos) { if (pos < 0 || pos > m_size - 1) { return; } ListNode *ptr1, *ptr2; if (pos == 0) { ptr1 = m_head; if (m_size == 1) { m_head = m_tail = nullptr; } else { m_head = m_head->next; } delete ptr1; } else { ptr1 = m_head; for (int i = 0; i < pos - 1; ++i) { ptr1 = ptr1->next; } ptr2 = ptr1->next; ptr1->next = ptr2->next; if (ptr2->next == nullptr) { m_tail = ptr1; } delete ptr2; } --m_size; } void updateNode(int pos, int val) { if (pos < 0 || pos > m_size - 1) { return; } ListNode *ptr = m_head; for (int i = 0; i < pos; ++i) { ptr = ptr->next; } ptr->val = val; } ListNode *findNode(int val) { ListNode *ptr = m_head; while (ptr != nullptr) { if (ptr->val == val) { return ptr; } ptr = ptr->next; } return nullptr; } ~SinglyLinkedList() { ListNode *ptr = m_head; while (m_head != nullptr) { m_head = m_head->next; delete ptr; ptr = m_head; } m_head = m_tail = nullptr; } private: int m_size; ListNode *m_head; ListNode *m_tail; }; int main() { return 0; }
相关文章推荐
- 《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——双向链表
- 《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——队列
- 《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——栈
- 数据结构复习——线性表的链式存储实现(单向链表)
- 【郝斌数据结构自学笔记】57-59_递归8 _ 汉诺塔_1线性结构总复习 2线性结构和非线性结构关系 3栈队列链表数组之间的关系【重点】
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)
- java数据结构之LinkedQueue(用链表实现的双端单向队列)
- 单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列
- 单向链表的建立,插入,删除(复习一下)
- 一个单向链表,并实现栈和队列
- 大话数据结构四:线性表的链式存储结构(单向循环链表)
- 利用 C++ 单向链表实现队列
- 线性表的Java实现--链式存储(单向链表)
- Java数据结构与算法—及实现 线性表 顺序表、链表、栈、队列详解
- 用单向链表实现队列功能
- c#:线性表,链表,栈,队列
- 《数据结构》复习之线性表(顺序表和链表)
- (一)线性表、单向链表
- 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
- 数据结构 学习笔记之:线性表——顺序表、静态链表、动态链表(单链表、双链表、单循环链表、双循环链表,链式栈、链式队列)——基础概念大扫盲!