一、反转链表
递归
public static LinkNode reverseDigui(LinkNode head) {
if (head == null || head.next == null) {//如果链表为空或者链表中只有一个元素
return head;
}
LinkNode retNode = reverseDigui(head.next);//先反转后面的链表,走到链表的末端结点
//再将当前节点设置为后面节点的后续节点
head.next.next = head;
head.next = null;
return retNode;
}
非递归
反转链表即将每个节点的next指针指向其前驱节点
由于单链表没有指向其前驱节点的指针,所以需要一个额外的指针来保存他的前驱节点,同时在改变他的next指针前需要保存他的后继节点。
public ListNode reverseList(ListNode head) {
ListNode cur=head;
ListNode prev=null;
while(cur!=null){
ListNode next=cur.next;
cur.next=prev;
prev=cur;
cur =next;
}