单链表的特征
- 链表是以节点的方式存储的,是链式存储结构。
- 每个节点包含data域,next域指向下一个节点。
- 链表的各个节点不一定是连续存储。
- 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。
单链表的反转
思路,定义两个变量temp(交换节点的变量),flag(指向temp的下一个节点,保存后面的节点).
- 让temp.next指向头2的链表的null(temp.next=头2.next temp这个节点就断了)
- 让头二的next指向temp这个节点(头2.next = temp,头2-->temp)
- 让temp节点也指向flag节点,flag节点后移1位(flag = temp.next)
- 让temp的下一个节点指向头儿的第一个节点(temp.next = 头2.next)
- 让头2的下一个节点指向temp节点(头2--->2--->1)
- 让temp节点也指向flag节点,flag节点后移1位(flag = temp.next)
- 让temp的下一个节点指向头儿的第一个节点(temp.next = 头2.next)
- 让头2的下一个节点指向temp节点(头2--->3--->2--->1)
- 头1的next节点指向头二的next节点(头1--->3--->2--->1)
public void reverse() {
if (head.next == null || head.next.next == null) { //判断节点是否为空或只有一个节点,一个节点没有反转的必要
return ;
}
// 反转后链表头节点
HeroNode revereHead = new HeroNode(0, "", "");
// 遍历用辅助节点
HeroNode temp = head.next;
// 取出节点的下一个节点,保存遍历指针
HeroNode flag = null;
while (temp != null) {
flag = temp.next; //保存temp后面的节点
temp.next = revereHead.next ; //让temp指向头儿的第一个节点
revereHead.next = temp; //让头2的第一个节点指向temp
temp = flag; // 辅助节点后移
}
head.next = revereHead.next;
}