单链表(linux c)

Posted 8734ujn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表(linux c)相关的知识,希望对你有一定的参考价值。

  因为之前对链表反转这一块一直记忆不清,现在复习总结一下,只要还是要了解复习指针地址操作,结构体定义。

  方法1:采用前插得方法,把节点从前边取出来然后再插到前边;分三步(具体看分解图)

  <一>先将第一个数字节点和头断开,然后接到链表最后

  <二>然后按照上边的方法把剩下的链表中的节点一个接一个的插到前边

  <三>直到将所有的节点插完,然后将新的头结点和head相连

  先上完整的反转代码。。链表中存入了15个数

  

  

void fanxu(list *plist)

  

  //标记首先需要的三个节点

  list *pwei=plist;

  list *per=plist->pnext;

  list *ptemp=NULL;

  while(pwei->pnext!=NULL)

  

  pwei=pwei->pnext;

  

  while(pwei!=per)

  

  ptemp=per; //永远标记第二个节点

  per=per->pnext;

  //第一次要把链表头断掉

  if(pwei->pnext==NULL)

  

  pwei->pnext=ptemp;

  ptemp->pnext=NULL; //断掉

  

  else

  

  ptemp->pnext=pwei->pnext; //前插

  pwei->pnext=ptemp; //然后再一块接到尾指针

  

  plist->pnext=per; //为了打印显示,可以省

  printf("per-jietou--****************************************************************************************\\n");

  showlist(plist);

  plist->pnext=pwei; //为了打印显示,可以省

  printf("pwei-jietou--***************************************************************************************\\n");

  showlist(plist);

  printf("\\n\\n\\n");

  

  plist->pnext=per;

  

 

  

  第一步:<一>先将第一个数字节点和头断开,然后接到链表最后

技术图片

  第二步:<二>然后按照上边的方法把剩下的链表中的节点一个接一个的插到前边

技术图片

  ………

  第三步: <三>直到将所有的节点插完,然后将新的头结点和head相连

技术图片

  ########################################################################################

方法2:在方法1的基础上改进简化(创建新标志位) 主要理解while(p)是判断节点p的地址,p=q 是地址之间的重新赋值

  <一>定义三个新的节点标志位p q pr 将链表的前一个节点插下来;

  <二> 然后将节点插到一个新的标志位后边,同样的方法插后边的节点

  <三>插完之后将新的标志位连接到之前的头结点打印

  ****************************************************************************************************************

  

void fanxu_gao(list *plist)

  

  list *pr;

  list *p=plist->pnext;

  list *q=NULL;

  plist->pnext =NULL;

  while(p)

  

  pr=p->pnext; //记录第二个地址

  p->pnext=q;

  q=p; //可以理解成给q和p重新赋值新地址

  p=pr; //标记第二个地址

  plist->pnext=q; //打印显示,可以没有

  printf("qqqqqqqqqqqqqqqqqg#############################################\\n");

  showlist(plist);

  plist->pnext=p; // 打印显示可以没有

  printf("ppppppppppppppppppppz#############################################\\n");

  showlist(plist);

  printf("\\n\\n\\n");

  

  plist->pnext=q;

  

 

  ************************************************************************************************************************

  <一>定义三个新的节点标志位p q pr 将链表的前一个节点插下来;

技术图片

  <二> 然后将节点插到一个新的标志位后边,同样的方法插后边的节点

技术图片

  <三>插完之后将新的标志位连接到之前的头结点打印

技术图片

  ***************************************************************************************************************************

最后在给大家分享些关于链表的资料可以进一步参考

单链表
http://www.makeru.com.cn/live/5413_1924.html?s=45051

C语言玩转链表
http://www.makeru.com.cn/live/1392_338.html?s=45051

指针
http://www.makeru.com.cn/live/1392_238.html?s=45051

以上是关于单链表(linux c)的主要内容,如果未能解决你的问题,请参考以下文章

C语言单链表合并

C语言 单链表

数据结构单链表 — 纯C实现单链表

单链表的基本操作操作,类C语言

数据结构代码(用C语言) 单链表的插入和删除

实用数据结构:怎样把两个单链表A B(本身都是有序表)合并为C并且C为有序表