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; }
原文:https://www.cnblogs.com/qian2015/p/10424014.html