本文共 831 字,大约阅读时间需要 2 分钟。
输入一个链表,反转链表后,输出新链表的表头。
递归
public ListNode ReverseList(ListNode head) { //递归返回的是当前节点,最终结果需要头结点,如果处理? //在递归函数外面定义 不好处理 //每次都返回头结点,处理当前节点的链接即可 if(head == null||head.next == null) return head; ListNode node = ReverseList(head.next); //让下一个节点指向当前节点 head.next.next = head; //当前节点指向空 head.next = null; return node; }
循环
public ListNode ReverseList(ListNode head) { ListNode temp = head; ListNode next_node = null; ListNode pre = null; while(temp!=null){ next_node = temp.next; //指针指向下一个 temp.next = pre; //当前节点连接上一个节点 pre = temp; //当前节点性质改变 temp = next_node; } return pre; }
突破点
1、递归
先递归拿到最后一个节点
下一个节点指向当前节点,断开当前节点的指针
2、循环
用变量 保存当前节点,方便下一次反向连接
转载地址:http://trle.baihongyu.com/