今日心情:😠😠
题目描述:
题目描述:
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。
解题代码:
/**
* 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) {
//注意判断head是否为null
if(head == null){return null;}
ListNode a = head;
ListNode b = a.next;
a.next = null; //将原来的头指针指向null
//进行链反转
while(b != null){
ListNode c = b.next;
b.next = a;
a = b;
b = c;
}
return a;
}
}
解题思路:
(1)首先判断链表是否为空
(2)两个两个进行链反转,然后将指针移动到下一对节点再次进行链表反转,如此循环往复,直到第二节点的 next 为 null 为止。
(3)注意:
1. 要使用一个c节点保存b的next指针,否则当反转指针的时候b.next已经指向a节点了,原来的b.next节点已经丢失了,无法移动到下一个节点继续链表反转了,所以要使用c节点暂存原来的b指向的下一个节点。
2. 在反转完了链表之后需要进行指针的移动,反转下一个链。所以a=b,b=c;
3. 此时返回a,b都可以(a,b都指向的头head)
4. 原来的第一个节点变成最后一个节点,所以这个节点的next需要指向null。