question:输入一个链表,反转链表后,输出新链表的表头。
resolution:
public ListNode ReverseList(ListNode head) {
ListNode pre = null;//上一跳
ListNode sub = null;//下一跳
while (head != null){
sub = head.next;
//更改指针的指向(开始反转) 这里不能写成pre = head.next 这样的话相当于将sub赋值给了pre
head.next = pre;
//head开始后移的时候,将head赋值给pre,将sub赋值给head
pre = head;
head = sub;
}
return pre;//这里返回的是pre,而不是head
}
总结:关键在于如何调整指针的走向,也就是如何进行反转。进一步也就是需要注意要保存好当前head的下一跳以及通过head.next = pre来调整指针的走向,同时还要记住将当前head赋值给pre,然后将sub赋值给head实现指针的移动。