反转链表
输入一个链表,反转链表后,输出新链表的表头。
思路
递归
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、循环
用变量 保存当前节点,方便下一次反向连接