LeetCode206---反转链表(Java实现,有图解)
题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例:
输入:[ 1 , 2 , 3 , 4 ]
输出:[ 4 , 3 , 2 , 1 ]
分析:该链表是单链表,反转后的链表的每个结点都指向前一个结点,即第一个指向空,最后一个指向倒数第二个。
整个过程大致可以概括为:断开当前结点指向 ,让该结点指向前一个结点,以此类推到最后一个节点。
此题将采用三指针法,画图进行说明:
代码实现:
public class ListNode {
ListNode next;
int val;
//构造方法
public ListNode(int val){
this.val = val;
}
public ListNode(){
}
public ListNode(int val,ListNode next){
this.val = val;
this.next = next;
}
}
class Solution{
public ListNode reverseList(ListNode head){
ListNode cur = head;
ListNode pre = null;
ListNode next = null;
while(cur != null){
next = cur.next; //next指向cur的下一个结点
cur.next = pre; //cur指向前一个结点
pre = cur; //pre指向cur
cur = next; //cur指向next
}
return pre; //返回反转后链表的首结点
}
}
说明:结点的构造题目一般都是给出的,我们只需实现主体,也就是Solution中的内容即可。
下一篇:
常用设计原则和设计模式
