图书整理(链表)
书店店员有一张链表形式的书单,每个节点代表一本书,节点中的值表示书的编号。为更方便整理书架,店员需要将书单倒过来排列,就可以从最后一本书开始整理,逐一将书放回到书架上。请倒序返回这个书单链表。
示例 1:
输入:head = [3,6,4,1] 输出:[1,4,6,3]
提示:
0 <= 链表长度 <= 10000
using System;
// 定义链表节点类
public class ListNode
{
public int Val { get; set; }
public ListNode Next { get; set; }
public ListNode(int val)
{
Val = val;
Next = null;
}
}
// 定义链表类(可选)
public class LinkedList
{
private ListNode head;
public LinkedList()
{
head = null;
}
// 添加节点到链表末尾
public void AddNode(int val)
{
ListNode newNode = new ListNode(val);
if (head == null)
{
head = newNode;
}
else
{
ListNode current = head;
while (current.Next != null)
{
current = current.Next;
}
current.Next = newNode;
}
}
//开始做翻转
public class Solution {
public int[] ReverseBookList(ListNode head) {
ListNode current=new() ;//创建一个临时节点累替代头指针 不用头指针防止找不到头丢失链表地址
current=head;
int count=0;//计数器 记录链表长度给后面数组做参考
while(current!=null)
{
current=current.next;
count++;
}//遍历链表获得长度
int [] temp = new int[count];//做一个等长数组
for(int i=count-1;i>=0;i--)
{
temp[i]=head.val;
head=head.next;
}//循环倒着存进数组 数组正着读取就是倒序了
return temp;
}
}
// 打印链表(用于验证)
public void PrintList()
{
ListNode current = head;
while (current != null)
{
Console.Write(current.Val + " ");
current = current.Next;
}
Console.WriteLine();
}
}
class Program
{
static void Main(string[] args)
{
LinkedList linkedList = new LinkedList();
string input;
int value;
do
{
Console.Write("请输入一个整数(输入'q'结束):");
input = Console.ReadLine();
if (int.TryParse(input, out value))
{
linkedList.AddNode(value);
}
else if (input.ToLower() == "q")
{
break;
}
else
{
Console.WriteLine("无效输入,请输入一个整数或'q'。");
}
} while (true);
// 打印链表以验证
linkedList.PrintList();
}
}