题解 | #反转链表#
反转链表
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;
}

