给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
1、迭代方法:
//迭代的方法,(也相当与双指针的方法)
//每次让当前节点next指向前一个节点
public ListNode guanFang1(ListNode head){
ListNode pre=null;
ListNode cur=head;
ListNode next=null;
while(cur!=null){
next=cur.next;//先保存住后一个节点的
cur.next=pre;//让当前节点的next指针指向前一个节点
pre=cur;//pre指针指向当前节点
cur=next;//当前节点指向下一个节点
}
return pre;//因为最后的时候pre指针指向第一个节点了
}
2、递归方法:
//递归
public ListNode reverse(ListNode head){
if(head==null||head.next==null){
return head;
}
ListNode ret= reverse(head.next);
//让当前节点的下一个节点的next指针指向当前节点(也就是后节点指向前一个节点)
head.next.next=head;
//让当前节点的next置为null,否则的话就成了循环链表了
head.next=null;
return ret;
}