这个也是模板了
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null)
return null;
ListNode p = head.next;
ListNode q = null;
head.next = null;
while (p != null){
q = p;
p = p.next;
q.next = head;
head = q;
}
return head;
}
}
虽然java里面没有指针,但是还是指针用着舒服
head是头指针 永远指向链表第一个节点
p时用来保存后面的链表的指针
q相当于swap时的临时变量一样用于交换两个节点的位置。
所以每一次的步骤是
- q = p;
q指向要插到前面的节点q - p = p.next;
p向后移保存后面的链表不丢失 - q.next = head;
q指向第一个节点 - head = q;
head指向q