题目:给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
思路一:使用双指针,cur指向要反转的结点,pre指向原链表中cur的前一个结点,将cur.next=pre即可反转。
代码:
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode cur=head;
ListNode next=null;
while(cur!=null){
next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
}
思路二:递归思想。
public ListNode reverseList(ListNode head) {
return reverse(null,head);
}
public ListNode reverse(ListNode pre,ListNode cur){
if(cur==null){
return pre;
}
ListNode next=null;
next=cur.next;
cur.next=pre;
return reverse(cur,next);
}