欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单向链表的反转

程序员文章站 2024-03-21 14:40:58
...

单向链表的反转

	我理解的链表反转和往前插入一样,虽然单链表不知道前一个节点,但是我们创建
	一个新的空链表,他的head节点是知道的。
	1.将第一个节点插入到新链表的头节点后面,即(newHead之后)
	2.将第二个节点插入到第一个节点1前面,就是newHead之后,
	3.依次插入,直到为空, 新链表就成了反转后的链表
	4.最后 head.next = newHead.next; 

单向链表的反转
temp就是要插入的当前节点,next是temp的下一个节点

		//核心代码
		while(true) {
			if(temp==null) {
				break;
			}
			next = temp.next;
			temp.next = newHead.next;
			newHead.next = temp;
			temp = next;
		}
		head.next = newHead.next;

1.插入第一个节点
开始temp为数据1
next = temp.next 用来保存下一个节点
开始新链表的newHead.next为null,
我们将temp.next = newHead.next;此时temp.next为null,
然后newHead.next = temp;第一个节点插入成功。
temp = next;节点后移(注意不是temp=temp.next)
单向链表的反转
2.插入第二个节点

单向链表的反转
原理类似,就是插入节点。(插入是先后在前)
此时temp为数据2,
temp.next = newHead.next; 数据2的next就是数据1
newHead.next = temp; 头节点的next就是数据2,插入成功
temp = next;节点后移;
3…依次插入,直到为空, 新链表就成了反转后的链表
4.最后 head.next = newHead.next;

完整代码

//反转列表
	static void reverseList(HeroNode head) {
		if(head.next==null) {
			System.out.println("链表为空");
			return;
		}
		HeroNode temp = head.next;
		HeroNode next = null;
		HeroNode newHead = new HeroNode(0, "", "");
		while(true) {
			if(temp==null) {
				break;
			}
			next = temp.next;
			temp.next = newHead.next;
			newHead.next = temp;
			temp = next;
		}
		head.next = newHead.next;
	}