反转一个单链表。(该题目来自力扣题库)
示例
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路
首先要判断链表是不是空链表和是否是只有一个节点的链表,因为一个节点的链表不用反转,即可直接返回。
链表与之前的数组不同,链表不能像数组一样可以反着遍历运用,所以只能正着来运用。
设置prev和cur,作用是改变链表的连接方向。随后记得也设置一个next,来存cur.next。好用来向后遍历。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null){
return null;
}
if(head.next==null){
return head;
}
ListNode prev=null;
ListNode cur=head;
while(cur!=null){
ListNode next=cur.next;
cur.next=prev;
prev=cur;
cur=next;
}
head=prev;
return head;
}
}