这道题,使用 迭代来做的话比较好理解一些,
迭代法:
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null||head.next==null)
return head;
ListNode newTemp = null;
LitNode curNode = head;
while(curNode!=null){
ListNode temp = curNode.next;
curNode.next = newTemp;
newTemp = curNode;
curNode = temp;
}
return newTemp;
}
}
当然使用 递归法 会利于后续 反转链表的plus题
递归法:
class Solution{
public ListNode reverseList(ListNode head){
if(head==null||head.next==null)
retrun head;
ListNode last = reverseList(head.next);
head.next.next = head;
head.next = null;
return last;
}
}
递归法:
class Solution{
ListNode beforeNode = null;
public ListNode reverseList(ListNode head, int n){
if(n==1){
beforeNode = head.next;
return head;
}
ListNode last = reverseList(head.next, n-1);
head.next.next = head;
head.next = beforeNode;
return last;
}
}
反转链表的 第 m ~ n个节点
class Solution{
ListNode beforeNode = null;
public ListNode reverseList(ListNode head, int m ,int n){
if(m==1){
return reverseList(head, n);
}
head.next = reverseList(head.next, m-1, n-1);
return head;
}
private ListNode reverseList(ListNode head, int n){
if(n==1){
beforeNode = head.next;
return head;
}
ListNode last = reverseList(head.next, n-1);
head.next.next = head;
head.next = beforeNode;
return last;
}
}