目录
题目一:给定一个单链表的头 head,完成链表的逆序调整
思路:先用 next 记录当前结点的下一个结点的位置;
再更改当前结点的逆序关系使其指向自己的前一个结点;
最后修改 pre、head、next至正确位置。
循环结束条件为 head == null
注:
(1)由于最后的结果需要使 head 指向逆序前的最后一个结点,所以返回值不能是 void
(2)不能写成 head = head.next 因为逆序关系的修改先于 head自身的位置修正,
head = head.next 会使 head 指向 null
代码:
public static Node reverseLinkedList(Node head){
Node pre = null;
Node next = null;
while(head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
题目二:给定一个双链表的头 head,完成链表的逆序调整
思路:先用 next 记录当前结点的下一个结点的位置;
再更改当前结点的逆序关系;
最后修改 pre、head、next至正确位置。
循环结束条件为 head == null
public static DoubleNode reverseDoubleList(DoubleNode head){
DoubleNode pre = null;
DoubleNode next = null;
while(head != null){
next = head.next;
head.next = pre;
head.last = next;
pre = head;
head = next;
}
return pre;
}
总结:
单双链表的反转先记录后面的环境再修改当前的关系
涉及换头的函数,返回值不为void