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

首页 / 新闻动态 / 单链表的就地逆置代码 链表的就地逆置是什么意思?

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

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

单链表的就地逆置的算法?

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

单链表的就地逆置代码将一双向循环链表逆置双向循环链表逆置思路