反转单向链表 c 大神!怎么理解链表这个反转函数?
c 大神!怎么理解链表这个反转函数?
首先,P是指向shape类的指针,指向当前元素,q是复制P的指针,它用来反转链表的位置,R是指向上一个位置的指针,while(P),也就是while(P!=null),表示r=q是copy q的值,即指向上一个位置的指针,q=P是copy的当前地址,P=P->next是将P向后移动,q->next=r是将q指向r,即后者是指在最后一步,当P=null时,q仍然保持链表的结尾。此时,用Q替换head,将链的头部改为链表的尾部,并结束整个反转
单链表反转:例如,原来的链表是head->
1->
2->
3-> NULL。反转后,head->3->2->1->null实现代码:#include
如何链表反转?
反转单个链表。R示例:[R
advanced:可以迭代或递归地反转链表。你能用两种方法解决这个问题吗?采用头部插入法。R代码
问题:给出一个单向列表并从头到尾反转它。例如:a-B-C-D依次是D-C-B-a。分析:假设每个节点的结构是:复制如下代码:类节点{char valuenode next},因为在反转链表时,我们需要更新每个节点的“next”值。但是,在更新下一个值之前,需要保存下一个值,否则无法继续。因此,我们需要两个指针分别指向前一个节点和下一个节点。在更新当前节点的“next”值之后,我们向下移动这两个节点,直到到达最后一个节点。代码如下:public node reverse(node current){//initializationnode previousnode=nullnode nextnode=nullwhile(current!=null){//保存下一个nodenextnode=current.next//update当前.next//update“下一步”的值当前.下一个=previousNode//shift指针previousNode=currentcurrent=nextNode}return previousNode}上面的代码使用非递归方法,也可以通过递归来解决。代码如下:复制代码如下:public node reverse(node current){if(current==null)|当前.下一个==null)返回currentNode nextNode=当前.nextcurrent.next=Nullnode reverserest=reverse(nextnode)return reverserest}递归方法实际上非常巧妙。它使用递归转到链表的末尾,然后更新每个节点的下一个值(代码的倒数第二句)。
如何反向输出一个链表?
如果head节点是l,则有p=q=l/*p,q是指向head节点的两个指针*/while(p->next!=null)P=P->next/*让P指向键列表中要访问的最后一个节点*/while(1){while(Q->next!=P)q=q->next/*让q向后看以找到最后一个要打印的节点*/printf(%dn,P->data)P=q/*P向前移动一个*/q=L/*q还引用头节点*/if(P=L)/*exit after accessing*/break}供您参考
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。