题目描述
反转一个单链表。
注意:对于单链表来说,修改链表主要参考数据结构中的链式结构,前插后插法进行节点的处理。后续补充数据结构的链表章节的基本知识。
- 迭代:
上图为LeetCode后图解:
参考数据结构的前插后插法思想,仅需借助两个指针去进行迭代反转。
public ListNode reverseList(ListNode head) {
ListNode cur = null;
ListNode pre = head;
while(pre != null){
// 该步与pre=flag完成链表的向后迭代操作
ListNode flag = pre.next;
pre.next = cur ;
cur = pre ;
pre = flag;
}
return cur;
}
- 递归:
注意递归停止的条件,在倒数第二个节点即停止,每次递归操作为其后一节点执行该节点,该节点指向空。
public ListNode reverseList(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}