链表:
方法一:循环解法思路:
代码:
public ListNode reverseList(ListNode head) { if(head == null||head.next==null){ return head; } ListNode newHead = null; while (head!=null){ ListNode tmp = head.next; head.next = newHead; newHead = head; head = tmp; } return newHead; }1 先判断链表是否为空或者只有一个节点:若是,直接返回即可
2 用一个新的头指针,和一个过度的指针,返回将head所指向的节点给连接到新的头指针下面。
方法二:递归
先判断链表是否为空或者只有一个节点:若是,直接返回即可。这个也是结束递归的条件
先理解每次放进去调用反转链表的方法的结果,再补充即可
每次调用方法之后传回来的如第一个链表所示
再让head.next.next指向head,head执行null即可
代码:
public ListNode reverseList(ListNode head) { if(head == null||head.next==null){ return head; } ListNode newHead = reverseList(head.next); head.next.next=head; head.next = null; return newHead; }