双向链表与单链表的区别
双向链表的节点
//链表的节点public class LinkNode2{#region 数据域public int index;public string str;#endregion#region 指针域public LinkNode2 pre;//上一个节点public LinkNode2 next;//下一个节点#endregion//创建这个节点时,存如数据public LinkNode2(int index, string str){this.index = index;this.str = str;}}
双向链表对象类
public class DoubleLinkList{public LinkNode2 head = new LinkNode2(0, "");//显示链表数据public void show(){LinkNode2 temp = head.next;while (temp != null){Console.WriteLine(temp.index+temp.str);temp = temp.next;}}//1.添加节点到尾部//2.插入节点//3.删除节点}
1.添加节点到尾部
在DoubleLinkList类里面的方法
//添加到双链表的末尾public void AddLast(LinkNode2 newnode){LinkNode2 temp = head;while (true){if(temp.next==null){temp.next = newnode;newnode.pre = temp;break;}temp = temp.next;}}
2.插入节点
在DoubleLinkList类里面的方法
//按照编号的顺序升序添加,(重复的也可以添加)public void AddOrder(LinkNode2 newnode){LinkNode2 temp = head;while (true){if (temp.next == null){temp.next = newnode;newnode.pre = temp;break;}if (temp.next.index >= newnode.index)//这是升序{//看图,就能明白newnode.next = temp.next;temp.next.pre = newnode;temp.next = newnode;newnode.pre = temp;break;}temp = temp.next;}}
3.删除节点
在DoubleLinkList类里面的方法
//根据index删除节点public void Delete(int index){LinkNode2 temp = head.next;while (true){if (temp == null){Console.WriteLine("没有这个数据");break;}if (temp.index == index)//找到了这个数据{temp.pre.next = temp.next;if(temp.next!=null)//不是最后一个节点才给下一个节点的pre引用,不然temp.next==null,temp.next.pre要空指针temp.next.pre = temp.pre;break;}temp = temp.next;}}
