最近在学数据结构!,给我整的寝食不安,别问我为什么,我就想秃个头而已......生活太难了,我写的代码也很复杂,但是我翻阅了很多其他网站上的相同题目,好些个博主和我的代码量差不多,但是我感觉基本意思都差不了多少,可能我的时间复杂度还有空间复杂度更高,你们就看个思路就行,但是我们还是要说一下这个让我搞了四五个小时二百多行的链表代码。我没有在PTA上验证,自己的运行结果是对的,所以算是写一下文章记录一下自己写的心路历程吧!!!!(本文自我感觉是针对一些平常感觉到自己的逻辑清楚,但是总是写不出来的那种人,其实我就是!!但是小苏也在努力改变!555~)

话不多说,见代码!<个人推荐用vscode去编写,别问我为什么,纯粹是因为他的界面逼格高,哈哈哈哈哈>

 
一元多项式的乘法与加法运算(超详细!!)_一元多项式

 

图一:创建一个结构体,然后typedef重新定义一下

一元多项式的乘法与加法运算(超详细!!)_一元多项式_02

 

 图二:定义一个CreateList方法,可以让我们创建一个不带头结点的并且直接在函数内部体现输入的,这里解答一些小伙伴们的疑惑(就是怎么创建链表这件事)之前我也一直很懵哈,但是我写了好多代码之后,就是错了又错,原因找了又找,然后就找到了他的这种实质:LIstNode s = (ListNode)malloc(sizeof(struct Node));这段代码而言,就是创建了单个结点,这个结点拥有data,exp,next指针的属性,然后这只是链表当中的其中的一个结点,并不意味着这个链表已经创建完了。

还有就是在这儿解释一下头结点是干啥的,头结点就是一个没有值得空的结点,(头结点也是拥有和结点一样的属性,但是不对他们的属性进行赋值)但是他拥有的next属性可以当做指针,就是为了方便在循环中进行方便运算,也方便插入删除操作,所以说,如果你懂,头结点有没有无所谓说实话。

一元多项式的乘法与加法运算(超详细!!)_链表_03

 图三:proudct计算一元多项式的乘积,再添加结点的过程中,需要对已生成链表中的exp值进行查询,如果有,证明存在重复结点,不添加但更新相同exp的值,直接下一轮;

一元多项式的乘法与加法运算(超详细!!)_链表_04

 一元多项式的乘法与加法运算(超详细!!)_结点_05

 

 图四:看到这儿,你会不会心想,这博主是个der吧!一个ADD函数写这么多行!!!我tm一个数组十几行代码给你搞定!,确实数组特别简单,但是我就是单纯的想提升一下自己链表的实力哈哈哈哈。这个ADD函数就是先添加有相同指数的结点,然后在新生成的链表中进行查重,如果不重复则添加list1中的结点,list2也是相同的办法,可能我这个办法不是特别好,但是也是一种思路,怎么说呢,仅供参考!

 

哎,到这儿有人问了,你写这么多,你还得排序吧!你说对了!哈哈哈

一元多项式的乘法与加法运算(超详细!!)_链表_06

 

 图五:到这儿就不多讲了,宝宝们你们自己看看代码吧,我到点了,要去上课了,哈哈哈哈