第一种利用迭代,利用最初的头节点作为p节点,每次将它的下一个节点作为头节点然后进行位子交换,直到点p.next为空,则交换完毕。
迭代方法leecode含义解释为:
按原始顺序迭代结点,并将它们逐个移动到列表的头部
让我们看一个例子:
请记住,黑色结点 23 是原始的头结点。
-
首先,我们将黑色结点的下一个结点(即结点 6)移动到列表的头部:
-
然后,我们将黑色结点的下一个结点(即结点 15)移动到列表的头部:
- 黑色结点的下一个结点现在是空。因此,我们停止这一过程并返回新的头结点 15。
class Solution {
public ListNode reverseList(ListNode head) {
ListNode p = head;
ListNode prehead ;
if(head == null){
return null;
}
while(p.next != null) {
prehead = head; //记录旧的头节点
head = p.next; //记录新的头节点
p.next = p.next.next;
head.next = prehead;
}
return head;
}
}
递归方法为:
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next==null){
return head;
}
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
}