单链表相关算法2_23

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;
}

  

猜你喜欢

转载自www.cnblogs.com/qian2015/p/10424014.html