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

LeetCode Hot 热题100 算法题 206.反转链表-算法&测试-easy模式

程序员文章站 2024-03-22 14:18:10
...

LeetCode Hot 热题100 算法题 206.反转链表-算法&测试-easy模式

反转一个单链表。
示例:1->2->3->4->5
输出:5->4->3->2->1

package leetcode.easy;

public class Solution206 {
	public static void main(String[] args) {
		ListNode head = new ListNode(0);//头节点不能动
		ListNode cur = head;
		for (int i = 1; i < 6; i++) {
			cur.next=new ListNode(i);
			cur=cur.next;
		}		
		
		S206ReverseLinkedList testReverseLinkedList = new S206ReverseLinkedList();		
		ListNode reverseList = testReverseLinkedList.reverseLinkedList(head.next);//从头节点的下一节点开始
		while(reverseList!=null) {
			System.out.println(reverseList.val);
			reverseList=reverseList.next;
		}
		
	}
}

class S206ReverseLinkedList{
	public ListNode reverseLinkedList(ListNode list) {//从链表的第一个节点开始
		ListNode cur = list;
		ListNode next = null;
		ListNode rvsList = null;//反向链表的第一个节点
		while(cur!=null) {
			next=cur.next;//next保存 原链表当前节点的下一节点
			cur.next=rvsList;//将原链表当前节点加到反向链表的头部
			rvsList=cur;//将反向链表的指针后移
			cur=next;//后移原链表的指针
		}
		return rvsList;
	}
	
	public ListNode reverseLinkedList2(ListNode head) {
		ListNode cur = head;
		ListNode next = null;
		ListNode rvsHead = new ListNode(-1);//反向链表有头节点
		while(cur!=null) {
			next=cur.next;//保存 当前节点的下一节点
			cur.next=rvsHead.next;//将新节点的next指向反向链表头节点的下一节点
			rvsHead.next=cur;//将反向链表头节点的下一节点指向新节点
			cur=next;//后移原链表的指针
		}
		return rvsHead;
	}
}

参考:
https://leetcode-cn.com/problems/reverse-linked-list