思路:
设置三个指针,cur 指向当前节点, pre 指向上一节点,tmp 指向下一节点。
一开始 cur 指向头节点,pre 与 tmp 置null(可以将其视作循环链表,则 pre 为头节点的上一节点)
遍历链表时,cur 移向下一节点,cur.next 指向上一节点 pre,实现链表反转。
代码:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseList(ListNode head) { ListNode cur = head; ListNode pre = null; ListNode tmp = null; while (cur != null) { tmp = cur.next;//tmp指向下一个节点 cur.next = pre;//cur.next指向pre,即指向前一节点 pre = cur;//pre 暂存当前节点 cur = tmp;//cur 移至下一节点 } return pre;//当cur移至下一节点且cur == null时,pre为链表尾结点 } }
原文:https://www.cnblogs.com/zccfrancis/p/14507490.html