1.取链表各个元素 进行头插法,得到新链表
class Solution {
public ListNode reverseList(ListNode head) {
ListNode p = head;
ListNode q = new ListNode(0);
while(p!=null){
ListNode cur = new ListNode(p.val);
cur.next = q.next;
q.next = cur ;
p = p.next;
}
return q.next;
}
}
2.双指针迭代
我们可以申请两个指针,第一个指针叫pre,最初是指向null的。
第二个指针cur指向head,然后不断遍历cur。
每次迭代到cur,都将cur的next指向pre,然后pre和cur前进一位。
都迭代完了(cur变成null了),pre就是最后一个节点了。
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head;
ListNode prev = null;
while(cur!=null){
ListNode t = cur.next;
cur.next = prev;
prev = cur;
cur = t;
}
return prev;
}
}
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur = head
pre = None
while cur:
t = cur.next
cur.next = pre
pre = cur
cur = t
return pre