反转链表

1.LeetCode原题地址

206. 反转链表 - 力扣(LeetCode)

2.解法思路一:采用迭代的方式,采用双指针进行遍历,prev先行,cur后行,最后返回cur节点,思路如下

  • head节前进一步,保留原next的引用
  • prev节点next指向cur节点,此处cur节点初始状态时清空引用,无需判空,博主写代码有这种习惯,但后面导致逻辑错误
  • cur节点前进一步
  • prev节点前进一步,赋值head节点的引用
  • 遍历直到prev节点跑完整个流程
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int val=0, ListNode next=null) {
 *         this.val = val;
 *         this.next = next;
 *     }
 * }
 */
public class Solution {
    public ListNode ReverseList(ListNode head) {
        ListNode prev = head;
        ListNode cur = default;
        while(prev != default){
            head = head.next;
            //if(cur != null)不能加,博主写代码有这种习惯,导致后面逻辑错误
            prev.next = cur;
            cur = prev;
            prev = head;
        }
        
        return cur;
    }
}