单链表反转之头插法
头插法的思想:
- 创建一个节点作为新的头节点。
- 遍历整个单向链表,每遍历到一个结点便把该结点移至新的头结点的下一个结点,直到到遍历结束。
- 将新的头节点再替换为源头结点。
下面上代码:
//单链表反转
public static void reverseLinkedList(SingleLinkedList list) {
//若链表长度为0或者为1则直接返回
if (list.getHead().getNext() == null || list.getHead().getNext().getNext() == null) {
return;
}
//创建新的头结点
Node newHead = new Node();
Node cur = list.getHead().getNext();
Node next;
//当前结点为null时结束
while (cur != null) {
//将指针先移至当前结点的下个结点,以便后面向后继续循环
next = cur.getNext();
//将新的头结点的下一个结点(即null)赋值给当前结点的下一个结点
cur.setNext(newHead.getNext());
//将当前节点赋值给新的头结点的下一个结点
newHead.setNext(cur);
//将当前节点向后移动
cur = next;
}
//最后再将新结点替换为源结点
list.getHead().setNext(newHead.getNext());
}