2016 - 2024

感恩一路有你

java创建链表 链表的就地逆置是什么意思?

浏览量:1980 时间:2021-04-04 20:44:46 作者:admin

链表的就地逆置是什么意思?

例如,链表a->B->C->D有一个头和一个尾。局部反转意味着a<-B<-c< Da成为表尾,d成为表头。假设structlink{intvaluestructlink*next}structlinka,B,C,Da->next=&BB->next=&CC->next=&DD->next=0,在反转之后,B->next=&AC->next=&BD->next=&CA->next=0,所谓的局部反转意味着在操作中遇到a->next=&B时,重写为B->next=&A

两种单链表局部逆(递归和普通循环)1。采用递归算法,对无前导节点的单链表(A1、A2、A3、A4、A5、A6)进行反向设置后得到(A6、A5、A4、A3、A2、A1)。考虑递归算法,如果只有一个节点,它将直接返回。如果有两个节点(A1,A2),则要执行的操作是:A2->next=A1,A1->next=NullReturn A2a2是新的头节点。如果有三个节点,则应首先反转子链(A2,A3),并返回子链的新头节点。然后将子链(A2,A3)看作一个复合节点A2”,形成一个新的二进制(A1,A2”),然后可以执行具有相同前面的操作:A2“->next=A1,A1->next=NullReturn A3”,即可以以相同的方式获得多个节点,node*reverse(node*head){node*P=head if(P==null)return null//如果是空链表,则返回一个空节点*q=P->next if(q==null)return P//如果只有一个节点,则返回else head=reverse(q)//记录子序列的新head q->next=P//将当前节点和反向子序列视为前后两个节点P、q。执行相应的反向操作p->next=null return head//返回新子序列的head节点}2。使用常用算法反向(head inserting method重建前导节点的新链表)node*reverse(node*head){node*P=head->next If(P)//如果链表不为空,则反向。否则,空操作{node*q=P->next head->next=null//在(P){P->next=head->next//建立链表head->next=P if(q)//操作空指针时,将头节点分开,你必须非常小心,容易犯错误{P=q}q=P->next}否则断开}返回头部}

java创建链表 java怎么实现链表 java单链表实现

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。