1.求单链表中有效节点个数
public static int GetLength(HeroNode headNode)
{
int length = 0;
var cur = headNode.Next;
while (true)
{
if (cur == null) break;
length++;
cur = cur.Next;
}
return length;
}
2.查找单链表中倒数第N个节点
public static HeroNode GetLastIndexNode(HeroNode headNode, int index)
{
var cur = headNode.Next;
//if (cur == null) return null;
int count = 0;
while (true)
{
if (cur == null) break;
count++;
cur = cur.Next;
}
if (index <= 0 || index > count)
{
return null;
}
cur = headNode.Next;
for (int i = 0; i < count - index; i++)
{
cur = cur.Next;
}
return cur;
}
3.单链表反转
public static HeroNode ReversetList(HeroNode headNode)
{
var cur = headNode.Next;
if (cur == null) return null;
var reversetNode = new HeroNode(0,"","");
HeroNode next = null;
while (cur!=null)
{
next = cur.Next;
cur.Next = reversetNode.Next;
reversetNode.Next = cur;
cur = next;
}
return reversetNode;
}
4.从尾到头打印单链表
public static void ReversetPrint(HeroNode head)
{
var cur = head.Next;
if (cur == null) return;
Stack<HeroNode> stack = new Stack<HeroNode>();
while (cur!=null)
{
stack.Push(cur);
cur = cur.Next;
}
while (stack.Count>0)
{
var temp = stack.Pop();
Console.WriteLine($"id={temp.Id},name={temp.Name},nickName={temp.NickName}");
}
}