首页 > 其他分享 >刚刚学了链表感觉好难(||^||)

刚刚学了链表感觉好难(||^||)

时间:2024-10-23 09:48:05浏览次数:3  
标签:head p1 struct 好难 next 链表 code 学了 data

理念听得差不多明白了,但实现起来感觉好难,老师在上面写代码的时候一蹴而就,我自己尝试的时候一窍不通,下课花了好久才写出差不多的代码,大家有什么好方法吗?球球了(>_<)

附上了写的链表代码,也欢迎大家提改进建议

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
struct code
{
	int data;
	struct code* next;
};
struct code* create()
{
	struct code* head = NULL, * p1 = NULL, * p2 = NULL;
	while (1)
	{
		p1 = (struct code*)malloc(sizeof(struct code));
		scanf("%d", &p1->data);
		if (p1->data == 0)
		{
			break;
		}
		if (head == NULL)
		{
			head = p2 = p1;
		}
		else
		{
			p2->next = p1;
			p2 = p1;
		}
	}
	if (p2)
	{
		p2->next = NULL;
	}
	return head;
}
void print(struct code* head)
{
	struct code* p = head;
	while (p)
	{
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
}
struct code* add(struct code* head, struct code* pn)
{
	struct code* p1 = head, * p2 = head;
	if (head == NULL)
	{
		head = pn;
		pn->next = NULL;
		return head;
	}
	while ((pn->data > p1->data) && (p1->next != NULL))
	{
		p2 = p1;
		p1 = p1->next;
	}
	if (pn->data <= p1->data)
	{
		if (p1 == head)
		{
			pn->next = head;
			head = pn;
		}
		else
		{
			p2->next = pn;
			pn->next = p1;
		}
	}
	else
	{
		pn->next = NULL;
		p1->next = pn;
	}
	return head;
}
struct code* delete(struct code* head, struct code* pm)
{
	struct code* p1 = head,* p2 = head;
	if (head == NULL)
	{
		return head;
	}
	if (pm->data == head->data)
	{
		head = head->next;
		free(p1);
		return head;
	}
	while ((p1->data != pm->data) && (p1->next != NULL))
	{
		p2 = p1;
		p1 = p1->next;
	}
	if (p1->data == pm->data)
	{
		p2->next = p1->next;
		free(p1);
	}
	return head;
}
int main()
{
	struct code* head = NULL, * pn = NULL, * pm = NULL;
	head = create();
	print(head);
	pn = (struct code*)malloc(sizeof(struct code));
	scanf("%d", &pn->data);
	head = add(head, pn);
	print(head);
	pm = (struct code*)malloc(sizeof(struct code));
	scanf("%d", &pm->data);
	head = delete(head, pm);
	print(head);
	return 0;
}

标签:head,p1,struct,好难,next,链表,code,学了,data
From: https://blog.csdn.net/2401_86986599/article/details/143175967

相关文章

  • 【快慢指针】LeetCode 143. 重排链表
    题解用快慢指针先找到中间结点,然后断开前后两条链,用头插法的思路逆转后面那条链,最后两条链依次从前往后遍历插入即可。参考代码/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nul......
  • 数据结构 链表 C语言
    数据结构第二章的链表//线性表的链式存储#include<stdlib.h>#include<stdio.h>typedefintElemType;typedefstructnode{ElemTypedata;structnode*next;}Node,*LinkList;//初始化空的单链表voidInitList(LinkList*L){*L=(LinkLis......
  • 奇偶序号分割单链表(C语言)
    算法思想:要想将单链表L按照奇偶序号分割为两个单链表A(奇),B(偶),我们便可以定义一个变量来记录当前遍历的结点序号的奇偶,两个指针ra,rb,ra负责将奇数位置结点赋到A中,rb同理核心代码:voiddevide(LinkListL,LinkListA,LinkListB){intindex=1;LNode*p=L->next;......
  • 160. 相交链表 Golang实现
    题目描述:给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。注意这里的相交节点表示的是值和物理位置都相同的节点,不仅仅是值相同。思路分析:假设链表A和链表B的长度分别为lenA和lenB,这个方法的奇妙之处......
  • C语言中如何实现链表
    文章开头:在C语言中,实现链表主要涉及以下几个步骤:定义链表的结点、创建链表、添加链表结点、删除链表结点、查找链表结点、打印链表和释放整个链表。我们以一个单链表为例,每一个结点包括两部分:一部分是数据域,存放元素的值;另一部分是指针域,存放下一个结点的地址。创建链表首先需要......
  • LeetCode题练习与总结:奇偶链表--328
    一、题目描述给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在 ......
  • 数据结构-双向链表
    一概念与结构带头双向循环链表注意:这⾥的“带头”跟前⾯我们说的“头结点”是两个概念,带头链表⾥的头结点,实际为“哨兵位”,哨兵位结点不存储任何有效元素,只是站在这⾥“放哨的。如果,带头的链表中,只有头节点,我们就称该链表为空链表。二双向链表的实现创建一个新项目,并创......
  • K个节点翻转链表
    概述起因:leetcode题目25.K个一组翻转链表问题描述给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值......
  • electron学习记录-学了忘,忘了学,学了还得忘~
    1、序言:光快速入门就搞了快一下午,先是遇到npm证书过期,然后npmconfigsetstrict-sslfalse后,又报各种错,总之重装npm(不是重装node是npminstall-gnpm)+淘宝镜像+ssl:false解决了electron的node_moudles,我一直安装不上,现在都是;最终还是我从其他项目中copy了出来;除node_modul......
  • 代码随想录算法训练营第五天| 面试题02.07.链表相交、leetcode142 环形链表II
    1.leetcode面试题02.07.链表相交题目链接:面试题02.07.链表相交-力扣(LeetCode)文章链接:代码随想录1.1代码跟着老师写的一个版本,自己能理解思路了,但是写的话可能还是有一些难#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,x):#......