题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode ReverseList(ListNode head) { // prePtr,curPtr for pointer change // nextPtr for moving // stopping -> curPtr is null ListNode prePtr,curPtr,nextPtr; // initialize the ptrs curPtr = head; if(curPtr == null) return curPtr; nextPtr = head.next; if(nextPtr == null) return head; head = null; // logical head node prePtr = null; while(true){ // process curPtr.next = prePtr; // moving if(nextPtr == null) return curPtr; // valid for process, but invalid for moving more prePtr = curPtr; curPtr = nextPtr; nextPtr = nextPtr.next; } } }
- 初始化三个节点
- 第一个节点设置为null,第二个节点指向第一个节点,第三个节点指向第二个节点
- 第一个节点设置为null 用作链表第一个节点,类似于逻辑节点,这样使得第一个节点前面和其他节点一样都具有一个节点,统一处理的模式