单向链表操作
来源:互联网 发布:mac版qq群文件 编辑:程序博客网 时间:2024/05/01 12:27
今天花了一天时间把单向链表的创建,增加,删除,修改,查找,遍历等问题用C++实现了一遍,把以前好多模糊的地方,终于弄清楚了。现在把这些内容记录下来。
1. 创建单向链表结点
我们通常用一个结构体表示链表结点,如下:
struct ListNode {int data; //链表数据域ListNode* next; //链表下一个结点ListNode() {data = 0;next = NULL;}};
2. 插入新结点
bool InsertListNode(ListNode* head, int pos, int data) { //head为链表头结点,pos为插入的位置,即在第pos个结点后插入,data为要新插入的数据if (NULL == head) { //判断链表是否为空return false;}ListNode* p = head;ListNode* q = (ListNode*)(<span class="KSFIND_CLASS" id="0KSFindDIV">malloc</span>(sizeof(ListNode))); //为新插入结点分配内存q->data = data; //新插入结点数据为dataint count = 0;if (pos >= 0) {while (p->next != NULL) { //遍历链表找到第pos个结点++count;p = p->next;if (count == pos) {break;}}q->next = p->next; //开始插入q结点,让p的后继结点称为q的后继结点p->next = q; //让q成为p的后继结点return true;}}
3.删除指定结点
bool DeleteListNode (ListNode* head, int pos) {if (NULL == head) {return false;}int count = 0;ListNode* p = head;if (pos > 1) {while (p != NULL) { //找到删除结点的前一结点p++count;if (count == pos) {break;}p = p->next;}ListNode* temp = p->next; //要定义一个中间变量来存储要删除的结点,这样才能释放删除结点所占内存,从而防止内存泄露p->next = temp->next;free(temp);//若这样直接赋值p->next = p->next->next;会造成内存泄露return true;}}
4.查找指定结点
bool FindListNode(ListNode* head, int data) {if (NULL == head) {return false;}ListNode* p = head->next;while (p != NULL) {if (p->data == data) {return true;}p = p->next;}}
5.修改指定结点数据
bool ModifyListNode(ListNode* head, int data, int new_data) {if (NULL == head) {return false;}ListNode* p = head;while (p != NULL) {if (p->data == data) {p->data = new_data;return true;}p = p->next;}}
6. 循环遍历链表
void LoopListNode(ListNode* head) {if (NULL == head) {return;}ListNode* p = head;while (p != NULL) {std::cout << p->data;p = p->next;}}
7.递归遍历链表
void RecursiveListNode(ListNode* head) {if (NULL == head) {return;}std::cout << head->data;RecursiveListNode(head->next);//如果将打印放在递归调用后面执行,则会实现链表的逆序打印,原因是递归是用栈保存中间变量的,利用了栈的后进先出原理}
0 0
- 单向链表操作
- 单向链表操作
- 单向链表操作
- 单向链表的操作
- 单向链表删除操作
- 单向链表的操作
- 单向链表相关操作
- 单向链表相关操作
- 单向链表的操作
- 单向链表操作函数
- 单向链表的操作
- 单向链表的操作
- 单向链表操作总结
- 单向链表的操作
- 单向链表的操作
- 单向链表的操作
- 单向循环链表操作
- 单向链表,单向循环链表的基本操作
- Android.mk中设置PROPERTIES属性
- Android:滑动菜单栏(二)开源项目SlidingMenu的示例
- STL array的size方法(18)
- 链表的冒泡排序
- 二叉树基本操作的程序实现
- 单向链表操作
- C++之练习题41
- mysql日期选择函数
- Android:滑动菜单栏(三)SlidingMenu动画效果的实现
- 点滴的积累---J2SE学习小结
- IntelliJ IDEA设置调试模式的Variables和Watches窗口的变量为Object模式
- 有多个broker的例子
- seL4 下载
- 测试人员 新需求跟进工作质量checklist