反转链表
反转链表
题目:输入一个链表,反转链表后,输出新链表的表头
思路:使用current保存当前的结点,next保存下一结点,pre保存前一结点。
每次现将下一结点用next保存起来,防止链表断裂;
之后进行指针反转,即将current.next指向pre;
后移,将一下个结点进行反转操作。(pre = current;current = next;)
直到current为null,此时pre指向的为反转后链表的头结点
代码实现
public ListNode reverseList(ListNode head){
if(head ==null)
return null;
ListNode current = head;
ListNode pre = null;
ListNode next = null;
while (current != null){
//next暂时保存下一个结点
next = current.next;
//将当前结点的下一个结点指向前一个结点,反转
current.next = pre;
//后移
pre =current;
current = next;
}
//如果head为null的时候,链表已经反转完毕,pre就是反转后链表的第一个节点
return pre;
}
查看18道真题和解析