/** * 反转链表 * 给一条单链表,请反转整个链表,并返回反转后的链表 * */
public class Test5 {
/** * 这个递归函数的定义:输入链表的头节点,进行链表反转,并返回反转后的链表 * 比如链表是这样的1->2->3->4->5->6 * ListNode last = reverse(head.next);是反转2->3->4->5->6这个链表 * 反转后的结果是1->2<-3<-4<-5<-6,此时节点1还没有被反转 * head.next.next = head;head.next是2这个节点,再next是节点2指向的节点 * 所以把节点2指向的节点改成head * head.next = null;把节点1和节点2断开 * @param head * @return */
static ListNode reverse(ListNode head) {
if (head == null || head.next == null ) return head;
ListNode last = reverse(head.next);
head.next.next = head;
head.next = null;
return last;
}
}
还没有评论,来说两句吧...