首页 > 编程语言 > 详细

单链表相关算法2_23

时间:2019-02-23 20:42:04      阅读:156      评论:0      收藏:0      [点我收藏+]

1. 链表反转:

给出两种解决方案:迭代式和递归式:

a:迭代式

理解的时候不要想着前后插,直接按照改变顺序也就是其指针指向即可。关于链表这一部分经常用到一个点就是当前节点(now),之前节点(prev),之后节点(next)。

插入的时候需要记录当前节点,下一个节点和之前最近的一个节点,在执行的时候,先保存下一个节点,之后将当前节点指向前一个节点,之后将下一个节点作为当前节点,之前操作的节点作为前一节点。

public ListNode reverseList(ListNode head) {
    if(head==null || head.next==null){
            return head
    }
    ListNode pre=null;
    ListNode now=head;
    
    while(now!=null){
            ListNode next=now.next;
            now.next=prev;
            prev=now;
            now=next;
}  
    return prev;
}

递归形式求解:

同样是找到最后一个节点,将最后一个节点指向前一个节点,在执行的过程中,所有其后面的节点都已经执行完毕。

注意中间的操作head.next=null,是为了防止后续指向时形成环操作。

public ListNode reverseList(ListNode head) {
         if(head.next==null){
           return head;
         }
         ListNode next=head.next;
         head.next=null;
         ListNode re=reverseList(next);
         next.next=head;
         return re;
}

  技术分享图片

 

单链表相关算法2_23

原文:https://www.cnblogs.com/qian2015/p/10424014.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!