反转链表
反转链表
题目:输入一个链表,反转链表后,输出新链表的表头
思路:使用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; }