阅读 90

链表反转c代码,链表递归排序

反转链表LeeCode206 .反转链表

给出单链表的起始节点head。 请反转链表,返回反转的链表。

解决方案1 :迭代prev指向上一个节点,初始化为nullptr,并且链表中的第一个节点指向nullptr。 cur指的是当前正在扫描的节点,其中cur-next指的是prev,而prev指的是cur。 首先,保存cur-next,用tmp保存,最后cur指向tmp。

class solution { public : listnode * reverse list (listnode * head ) { ListNode* prev=nullptr; ListNode* cur=head; 空ptr!=cur}{listnode*tmp=cur-next; cur-next=prev; prev=cur; cur=tmp; } return prev; }; 解法二:递归返回的第一个是反转链表后的头部节点reverseHead,所以保存。 之后,递归返回的节点也是这样。 递归是具有状态的循环,前面的节点指向后面的节点,所以如果后面的节点指向前面的节点,前面就不再指向它,就会被切断。

//写法一class solution (public : listnode * reverse list ) listnode*head ) if ) nullptr==head|| nullptr==head-nexexe 头-下一个-下一个=头; head-next=nullptr; return reverseHead; }; 我个人认为写法2很容易理解。 当前节点的下一个节点ListNode* tmp=cur-next; 中选择所需的族。 然后,当前节点指向前一个节点cur-next=prev,最后,当前节点cur作为前一个节点prev的参数,tmp表示当前节点cur的参数(reverse(listnode*prev,listnode ) )

//写法2 class solution (public : listnode * reverse list ) listnode*head ) returnreverse ) nullptr,head; } listnode * reverse (listnode * prev,ListNode* cur ) if ) cur==nullptr ) return prev; ListNode* tmp=cur-next; cur-next=prev; returnreverse(cur,tmp; };


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐