首页 > 其他分享 >链表

链表

时间:2023-09-03 20:55:38浏览次数:39  
标签:Node head int next 链表 NULL

链表

当需要插入或删除数据结构中某些元素时,用链表比数组方便得多,访问某一元素时则链表就是个dd。 (链表可以用来秀指针操作

注意:链表中的每个元素在使用前都要申请一个空间(new)并指向NULL(->next = NULL),即初始化操作
由于链表不能访问某一元素,所以每次操作前都要从头开始(p =head),并用j记录节点下标


单链表基本框架

这是单链表

结构体

struct Node {                 
	int data;
	Node *next;   //自引用,构建链表,链表中每个结点有两部分,数据域data和指针域next,data存值,next指向下一个结点
} *head, *p, *r;	       //头指针,指针,尾指针

建表

void set(int a[], int n) {  //尾插 
	head = new Node; head -> next = NULL; r=head;    //刚开始是r和head是在一起的,便于尾插操作
	for (int i = 1; i <= n; i++) {
		p = new Node;
		p -> data = a[i];
		p -> next = NULL;
		r -> next = p;         //将p插到r后面
		r = p;                      //r后移
	}
}

这是单链表插删

插入

void insert(int a[], int pos, int val) {    //详见模拟图
	p = head;		      //从头开始
	int i = 0;
	while (p != NULL && i < pos - 1) {
		p = p -> next;      //p指向下一个结点
		i++;
	}
	Node *s; 
	s = new Node;
	s -> data = val;
	s -> next = p -> next;
	p -> next = s; 
}

删除

void del(int a[], int pos) {      //详见模拟图
	p = head;
	int i = 0;
	while (p != NULL && i < pos - 1) {
		p = p -> next;
		i++;
	}
	Node *s;
	s = new Node;
	s = p -> next;
	p -> next = s -> next;
	delete[] s;
} 

打印

void print() {                                      
	p = head -> next;
	while (p -> next != NULL) {
		cout << p -> data << " ";
		p = p -> next;
	}
	cout << p -> data << endl;
}

主函数

int main() {
	int n;
	cin >> n;
	int a[200000];
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	set(a, n); 
	int m;
	cin >> m;
	for (int i = 1; i <= n; i++) {
		if (a[i] == m) {
			del(a, i);
		}
	}
	print();
	delete[] p;     //防内存泄漏
  	delete[] head;
	return 0;
} 

双向链表模拟

这是双向链表模拟


循环链表模拟

这是循环链表模拟

标签:Node,head,int,next,链表,NULL
From: https://www.cnblogs.com/codaaaa/p/17675559.html

相关文章

  • 单链表题目*4
    //获取单链表有效结点个数publicstaticintgetLength(ListNodehead){if(head.next==null){return0;}intresult=0;ListNodetemp=head.next;while(temp!=null){result++;temp=temp.next;}returnresult;}//......
  • 链表实现插入排序
    将一串整型范围内的数按升序输出。数据输入样式16-53-3-54744818-245463663-9919-99990789用链表实现实例:1)结构体定义1structListNode2{3intdata;4ListNode*next;//结构体指针5ListNode*pre;//结构体指针6};2)建一个初始......
  • 单链表相关
    单链表创建总结*创建ListNode结点类有属性valnext考虑现实使用val定义为一个no和若干val,toString()重写*创建SingleLinkedList单链表类有private属性头指针head需要初始化*单链表类需要有的方法:*遍历方法:不为空、则从头指针.next首元结点开始遍历,直至尾部*插入结......
  • 数据结构与算法——有头无头循环链表详解
    ......
  • stm32在oled上实现多级菜单(基于链表)
    为了提高OLED显示多级菜单的易用性,手搓了基于链表的多级菜单的代码。主要有如下特点:1:需要配置地方少,后续新加菜单只需在初始化的时候添加,以及自己实现按键事件的回调函数即可。2:事件驱动,按键事件通过队列接收。因此,整个过程中,重写按键程序,消息队列,以及多级菜单框架。复习下双......
  • 链表详解
    C++中的链表是一种数据结构,用于存储一系列元素,每个元素都包含一个值以及一个指向下一个元素的指针。链表可以分为单向链表和双向链表,其中单向链表每个节点只有一个指向下一个节点的指针,而双向链表每个节点有一个指向下一个节点和一个指向前一个节点的指针。以下是关于C++链表的详......
  • 【剑指Offer】15、反转链表
    【剑指Offer】15、反转链表题目描述:输入一个链表,反转链表后,输出新链表的表头。解题思路:本题比较简单,有两种方法可以实现:(1)三指针。使用三个指针,分别指向当前遍历到的结点、它的前一个结点以及后一个结点。将指针反转后,三个结点依次前移即可。(2)递归方法。同样可以采用递归来实现......
  • 剑指Offer 35. 复杂链表的复制
    题目链接:剑指Offer35.复杂链表的复制题目描述:请实现copyRandomList函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个next指针指向下一个节点,还有一个random指针指向链表中的任意节点或者null。解法思路:遍历整个链表,在每个节点的后面,插入一个当前节点的复制,......
  • HashMap链表树化究竟是怎样的?
    网上一直看到两种说法:1.数组长度大于64且当链表长度>8时,链表转换为红黑树;2.数组长度大于64且当链表长度≥8时,链表转换为红黑树。 上源码,主要是putVal()函数/***ImplementsMap.putandrelatedmethods.**@paramhashhashforkey*@paramkeythekey*@par......
  • 手撕代码之链表
    文章目录一、反转链表(leetcode206)二、两个链表的交点(leetcode160)三、链表的中间结点(leetcode876)四、判断链表是否存在环(leetcode141)五、输出链表环的入口结点(leetcode142)六、删除链表中倒数第k个节点(leetcode19)七、合并两个排序链表(leetcode21)八、O(1)时间删除链表中的一个......