【发布时间】:2015-03-29 06:43:49
【问题描述】:
我实现了 2 个方法,即 RemoveAfter 和 RemoveBefore,它们将在指示节点之前/之后删除节点。方法 Remove After 工作正常,但我不知道为什么 RemoveBefore 给我错误,因为 front 总是为空。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Question7
{
public class LinkedListNode
{
public LinkedListNode next = null;
public int data;
public LinkedListNode(int d) { data = d; }
public void AppendToTail(int d)
{
LinkedListNode end = new LinkedListNode(d);
LinkedListNode n = this;
while (n.next != null) { n = n.next; }
n.next = end;
}
}
class Program
{
#region DeleteAFter
public static bool DeleteAfter(LinkedListNode n)
{
if (n == null || n.next == null)
{
return false; // Failure
}
LinkedListNode next = n.next;
n.next = next.next;
return true;
}
#endregion
static LinkedListNode front;
#region DeleteBefore
public static bool DeleteBefore(LinkedListNode n)
{
LinkedListNode prev = null;
LinkedListNode curr = front;
prev = curr;
while(curr.data != n.data)
{
prev = curr;
curr = curr.next;
}
prev.data = curr.data;
prev.next = curr.next;
return true;
}
#endregion
static void PrintList(LinkedListNode list)
{
while (list != null)
{
Console.Write(list.data + "->");
list = list.next;
}
Console.WriteLine("null");
}
static void Main(String[] args)
{
LinkedListNode myList = new LinkedListNode(5);
myList.AppendToTail(6);
myList.AppendToTail(7);
myList.AppendToTail(8);
// Now the list is 5->6->7->8
Console.Write("Before deletion: ");
PrintList(myList); // 5->6->7->8->null
LinkedListNode deletedNode = myList;
int val = 7;
while (deletedNode.data != val)
{
deletedNode = deletedNode.next;
}
Console.Write("After deletion: ");
if (DeleteBefore(deletedNode))
PrintList(myList);
Console.Read();
}
}
}
【问题讨论】:
-
你在做什么?你期待什么输出?在
DeleteBefore,列表中有两个元素,即7,8 -
我正在实现 2 种方法,这些方法将在指定节点之前/之后删除节点。输出将是删除节点后的列表。
-
所以当列表中有两个元素时,即
7,8,并且您调用DeleteBefore,您要删除哪个节点? -
例如,我有一个列表:5-6-7-8。如果我调用 DeleteBefore(8) 它将删除节点 7
-
您是否注意到 DeleteBefore 从不 测试
null的任何内容?
标签: c# linked-list head