题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 OJ链接
示例:
输入:[ 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中的内容即可。