LeetCode 206: 反转链表
💙 解题思路:
(1)通过方法的返回值为ListNode知道并不是要简单的逆序输出链表的值,而是通过改变next域来创建逆序链表
(2)要记得将原来的头结点的next域指向空,否则就会形成理论上的环,第一个结点指向第二个结点,第二个结点指向第一个结点
(3)对于链表逆序问题是比较基础的也是比较简单的,设置两个指针来完成next域的更新,要创建一个临时指针保存后继结点的next域
☀️ 代码部分:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
//特殊情况处理:链表为空、只有一个结点
if(head == null || head.next == null){
return head;
}
//p为前驱结点,q为后继结点
ListNode q = head;
ListNode p = null;
while(q != null){
ListNode temp = q.next;
q.next = p;
p = q;
q = temp;
}
return p;
}
}