题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
反转链表是一道简单题,但是有时会脑抽突然想不起来思路,所以记录一下。
本地的做法有两种 1. 创建一个新的头结点然后遍历原链表使用尾插法来新建链表;2. 在原链表上进行修改的双指针法改变一个链表中的指针指向。
这里使用的是双指针法。
/** * 双指针 改变链表节点的指向 在原链表基础上修改 * @param head * @return */ public ListNode reverseList01(ListNode head) { //记录前驱 ListNode prev = null; //遍历节点 ListNode cur = head; //临时节点 ListNode temp = null; //遍历 while (cur!=null){ //通过临时节点 记录cur节点顺序下的下一个节点 temp = cur.next; //然后再将cur.next的指向翻转 cur.next = prev; prev = cur; cur = temp; } //循环执行直至cur==null //再返回prev 此时的prev就是原链表的末尾节点 但是节点指向都翻转了 所以这是翻转后链表的头结点 return prev; }