博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——单向链表...
阅读量:5084 次
发布时间:2019-06-13

本文共 3556 字,大约阅读时间需要 11 分钟。

2014.06.14 21:40

简介:

  单向链表应该是绝大多数C语言初学者学会的第一个结构体了。每个节点会指向后续节点,属于顺序结构。由于单链表的实现简单,并且有着明显的限制,使其成为各种天才面试官们虐小朋友的利器(链表的功能实在很有限,而面试官总是要求你用链表完成各种各样的任务,难度就在这儿了)。因此,随手写链表肯定是参加面试的底线了,否则你都没机会动笔就可以回家等消息了。

图示:

  

实现:

1 // My implementation for singly linked list.  2 struct ListNode {  3     int val;  4     ListNode *next;  5     ListNode(int _val = 0): val(_val), next(nullptr) {};  6 };  7   8 class SinglyLinkedList {  9 public: 10     SinglyLinkedList() { 11         m_size = 0; 12         m_head = nullptr; 13         m_tail = nullptr; 14     } 15      16     void insertFront(int val) { 17         if (m_size == 0) { 18             m_head = m_tail = new ListNode(val); 19         } else { 20             ListNode *ptr = new ListNode(val); 21             ptr->next = m_head; 22             m_head = ptr; 23         } 24         ++m_size; 25     } 26      27     void insertBack(int val) { 28         if (m_size == 0) { 29             m_head = m_tail = new ListNode(val); 30         } else { 31             m_tail->next = new ListNode(val); 32             m_tail = m_tail->next; 33         } 34         ++m_size; 35     } 36      37     void insertNode(int pos, int val) { 38         int i; 39          40         if (i <= 0) { 41             insertFront(val); 42         } else if (i >= m_size) { 43             insertBack(val); 44         } else { 45             ListNode *ptr1, *ptr2; 46              47             ptr1 = m_head; 48             for (i = 0; i < pos - 1; ++i) { 49                 ptr1 = ptr1->next; 50             } 51             ptr2 = new ListNode(val); 52             ptr2->next = ptr1->next; 53             ptr1->next = ptr2; 54             ++m_size; 55         } 56     } 57      58     void deleteNode(int pos) { 59         if (pos < 0 || pos > m_size - 1) { 60             return; 61         } 62          63         ListNode *ptr1, *ptr2; 64         if (pos == 0) { 65             ptr1 = m_head; 66             if (m_size == 1) { 67                 m_head = m_tail = nullptr; 68             } else { 69                 m_head = m_head->next; 70             } 71             delete ptr1; 72         } else { 73             ptr1 = m_head; 74             for (int i = 0; i < pos - 1; ++i) { 75                 ptr1 = ptr1->next; 76             } 77             ptr2 = ptr1->next; 78             ptr1->next = ptr2->next; 79             if (ptr2->next == nullptr) { 80                 m_tail = ptr1; 81             } 82             delete ptr2; 83         } 84         --m_size; 85     } 86      87     void updateNode(int pos, int val) { 88         if (pos < 0 || pos > m_size - 1) { 89             return; 90         } 91          92         ListNode *ptr = m_head; 93         for (int i = 0; i < pos; ++i) { 94             ptr = ptr->next; 95         } 96         ptr->val = val; 97     } 98      99     ListNode *findNode(int val) {100         ListNode *ptr = m_head;101         while (ptr != nullptr) {102             if (ptr->val == val) {103                 return ptr;104             }105             ptr = ptr->next;106         }107         108         return nullptr;109     }110     111     ~SinglyLinkedList() {112         ListNode *ptr = m_head;113         while (m_head != nullptr) {114             m_head = m_head->next;115             delete ptr;116             ptr = m_head;117         }118         m_head = m_tail = nullptr;119     }120 private:121     int m_size;122     ListNode *m_head;123     ListNode *m_tail;124 };125 126 int main()127 {128     return 0;129 }

 

转载于:https://www.cnblogs.com/zhuli19901106/p/3788760.html

你可能感兴趣的文章
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
15 FFT及其框图实现
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>
3.0.35 platform 设备资源和数据
查看>>
centos redis 安装过程,解决办法
查看>>
IOS小技巧整理
查看>>
WebDriverExtensionsByC#
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
sublime 配置java运行环境
查看>>
在centos上开关tomcat
查看>>
重启rabbitmq服务
查看>>
正则表达式(进阶篇)
查看>>
无人值守安装linux系统
查看>>
【传道】中国首部淘宝卖家演讲公开课:农业本该如此
查看>>
jQuery应用 代码片段
查看>>