精选文章 单向链表

单向链表

作者:code_stack 时间: 2021-02-05 09:44:40
code_stack 2021-02-05 09:44:40
【摘要】程序的本质是数据结构+算法 
不同的数据结构对应不同的算法 
  
创建单向链表 
Node * createList()
{
	Node * head = (Node *)malloc(sizeof(Node));
	head->next = NULL;
	return head;

} 
  
删除链表的某个元素 
void deleteList(Node * head, Node *p...

 

程序的本质是数据结构+算法

不同的数据结构对应不同的算法

 

创建单向链表

Node * createList()
{
	Node * head = (Node *)malloc(sizeof(Node));
	head->next = NULL;
	return head;

}

 

删除链表的某个元素

void deleteList(Node * head, Node *pfind)//前驱
{
	if (NULL == pfind->next) // 如果当前 pfind后面没元素了,不能使用赋值的形式进行操作
	{
		while (head->next != pfind)
	{
		head = head->next;
	}
	head->next = pfind->next;
	free(pfind);

	}
	else
	{
		pfind->data = pfind->next->data; // 使用赋值的形式进行操作
		Node * t = pfind->next;
		pfind->next = pfind->next->next;
		free(t);
	}

}

使用场景:

Node *pfind = searchList(head, 6); if (pfind != NULL) { printf("find in the list\n"); deleteList(head, pfind); }

删除链表

void destoryList(Node * head)
{
	Node * t;
	while (head)
	{
		t = head->next;
		free(head);
		head = t;
	}

}

对链表元素排序

void popSortList(Node * head)//冒泡排序
{ Node * p, *q, *pre;
	int len = lenList(head);
	for (int i = 0; i < len - 1; i++)
	{
		pre = head;
		p = head->next;
		q = p->next;
		for (int j = 0; j < len - 1 - i; j++)
		{ if (p->data > q->data) { pre->next = q; p->next = q->next; q->next = p; pre = pre->next; q = p->next; continue; } pre = pre->next; p = p->next; q = q->next; }
	}

}

链表逆转

遍历链表中所有结点,依次将各结点从链表中抽出,插到头结点和第一个数据结点之间

void reverseList(Node * head)
{
	Node * cur = head->next; head->next = NULL; // 切断链表,分裂为头和没有头的链表 Node *t; while(cur) { t = cur; cur = cur->next; t->next = head->next; // 让当前元素有指向 head->next = t; // 让头结点指向当前元素 }
	
}

 

勿删,copyright占位
您找到想要的结果了吗?
单向链表
提交成功!非常感谢您的反馈,我们会继续努力做到更好
分享文章到微博
分享文章到朋友圈

上一篇:.Net core 发布文件的了解总结

下一篇:[转载]Redis常见问题 | 缓存穿透、击穿、雪崩、预热、更新、降级及对应的解决方案

您可能感兴趣

  • 链表拼接 (20分)

    本题要求实现一个合并两个有序链表的简单函数。 函数接口定义: struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2); ...

  • 114. 二叉树展开为链表

    非前序遍历的方法 class Solution { public void flatten(TreeNode root) { connect(root); } pub...

  • 单链表 - 数据结构

        线性表:n个数据元素的有限序列。一般指逻辑结构上的线性结构。当n=0时为空表。——栈、队列、串。 线性表的特点: 1)对于同一线性表的各数据元素必定具有相同的数据类型和长度; 2)数据元素之间的相对位置是线性的。   链表(Linked List):链接方式存储的线性表。 1)用一组任意的存储单元来存放线...

  • 1075 链表元素分类

    给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为 18→7→-4→0→5→-6→10→11→-2,K 为 10,则输出应该为 -4→-6→-2→7→0→5→10→18→11。 输入格式: 每个输入...

  • leetcode(206)反转链表-python

    反转一个链表,使用迭代和递归两种方法。 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 迭代: 双指针,第一个指针pre,先指向null。第二个指针cur,指向头节点he...

  • 链表常见操作

    链表常见操作 参考:https://blog.csdn.net/maybe3is3u5/article/details/52276623 https://blog.csdn.net/Lily_whl/article/details/71662133 一、带环链表问题 0.人为构造一个带环链表 //人为构造一个带环链表,使尾节点指向链表的第i...

  • 邻接表and十字链表

    邻接表: 每一行都可以看成一个单链表,第一行中,v0-1-3可以得到,v0的出度为v1和v3。 邻接表完整代码: #include <iostream> using namespace std; const...

  • 【剑指offer】反转单链表

    题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下: struct listNode { int m_nKey; listNode * m_pNext; }; /* Function: reverseList Description: r...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。
单向链表介绍:华为云为您免费提供单向链表在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多单向链表的相关内容。| 移动地址: 单向链表 | 写博客