/// <summary> /// 在给定的单链表中删除所有等于target的值的节点 /// </summary> /// <param name="linkList"></param> /// <param name="target"></param> public static MyLinkNode DeleteTargetByValue(MyLinkNode linkList, int target) { if (linkList != null) { MyLinkNode p = linkList; if (linkList.Data == target) { linkList = linkList.Next; } while (p.Next != null) { if (p.Next.Data == target) { p.Next = p.Next.Next; } else { p = p.Next; } } } return(linkList); }
/// <summary> /// 在已知的单链表linklist里面,删除目标节点node /// </summary> /// <param name="linkList"></param> /// <param name="node"></param> public static MyLinkNode DeleteTarget(MyLinkNode linkList, MyLinkNode node) { if (linkList != null && node != null) { // 如果待删除节点是第一个节点,并且链表不带头节点 // 我们要做特殊处理 if (linkList == node) { linkList = linkList.Next; } else { MyLinkNode p = linkList; while (p != null && p.Next != node) { p = p.Next; } ///说明我们找到了目标节点 if (p.Next == node) { p.Next = p.Next.Next; } } } return(linkList); }
static void Main(string[] args) { MyLinkNode node1 = new MyLinkNode() { Data = 1 }; MyLinkNode node2 = new MyLinkNode() { Data = 2 }; MyLinkNode node3 = new MyLinkNode() { Data = 3 }; MyLinkNode node4 = new MyLinkNode() { Data = 4 }; MyLinkNode node5 = new MyLinkNode() { Data = 4 }; MyLinkNode node6 = new MyLinkNode() { Data = 5 }; MyLinkNode node7 = new MyLinkNode() { Data = 6 }; node1.Next = node2; node2.Next = node3; node3.Next = node4; node4.Next = node5; node5.Next = node6; node6.Next = node7; // node1.VisitFromBack(); // MyLinkNode.VisitFromBackNByN(node1); //var node = MyLinkNode.DeleteTarget(node1, node3); // node.Visit(); node1.Visit(); var node = MyLinkNode.DeleteTargetByValue(node1, 1); node.Visit(); MyLinkNode.DeleteTargetByValue(node1, 4); node1.Visit(); }
public void Visit() { MyLinkNode p = this; while (p != null) { Console.Write(p.Data + "=>"); p = p.Next; } Console.WriteLine(); }
/// <summary> /// 倒序打印单链表 - N*N复杂度 /// </summary> /// <param name="node"></param> public static void VisitFromBackNByN(MyLinkNode node) { if (node != null) { MyLinkNode end = null; MyLinkNode p = node; while (end != node) { p = node; while (p.Next != end) { p = p.Next; } Console.Write(p.Data + "=>"); end = p; } } }