软件工程师典藏 C# 程序开发范例宝典

【实例截图】

文件:590m.com/f/25127180-489402234-528749(访问密码:551685)

以下内容无关:

——————————————-分割线———————————————

双向链表

双向链表的增、删、改、遍历思路

1.增加: 在双向链表的末尾增加;

只需找到最后一个结点temp;

temp.next = newNode;

newNode.pre = temp;

2.指定的位置插入

假设插入到index位置,

有两种情况:①当temp.next.no > index是则找到该位置,temp为该位置的上一个结点

② 遍历后到了链表尾则直接插入链表尾部

3.删除元素

4.修改元素

public class DoubleLinkList {

public static void main(String[] args) {

Node nodeA = new Node(1, “aaa”, “AAA”);

Node nodeB = new Node(5, “bbb”, “BBB”);

Node nodeC = new Node(8, “ccc”, “CCC”);

Node nodeD = new Node(9, “ddd”, “DDD”);

DoubleLink listArray = new DoubleLink();

listArray.add(nodeA);

listArray.add(nodeB);

listArray.add(nodeC);

listArray.insert(nodeD,10);

listArray.getList();

// listArray.update(nodeD);

// listArray.delete(nodeC);

// listArray.getList();

}

}

class DoubleLink {

private Node head = new Node(0,””,””);

public Node getHead() {

return head;

}

// 遍历双向链表

public void getList() {

if (head.next == null) {

System.out.println(“链表为空”);

return;

}

Node temp = head;

while (temp.next != null) {

System.out.println(temp.next);

temp =temp.next;

}

}

// 双向链表中添加元素

public void add(Node node) {

Node temp = head;

while (temp.next != null) {

temp = temp.next;

}

temp.next = node; // 在尾部插入要增加的结点

node.pre = temp; // 让新增的结点的pre指向前一个结点

}

// 修改双向链表的元素

public void update(Node node) {

if (head.next == null) {

System.out.println(“链表为空”);

return;

}

Node temp = head.next;

while (temp.no != node.no) {

if (temp == null) {

System.out.println(“未找到该元素”);

return;

}

temp =temp.next;

}

temp.name = node.name;

temp.bName = node.bName;

}

// 删除双向链表的元素

public void delete(Node node) {

if (head.next == null) {

System.out.println(“链表为空”);

return;

}

Node temp = head.next;

while (temp.no != node.no) {

if (temp == null) {

System.out.println(“未找到该结点”);

return;

}

temp = temp.next;

}

temp.pre.next = temp.next; // 要删除结点的上一个结点next指向要删除节点的下一个结点

// 判断删除的结点是不是最后一个,如果最后一个则不执行

if (temp.next != null) {

temp.next.pre = temp.pre; //让当前元素的下一个结点的pre指向当前元素的像一个结点的pre

}

}

// 指定位置插入元素

public void insert(Node node,int index) {

Node temp = head;

boolean flag = false;

while (true) {

if (temp.next == null) {

System.out.println(“到尾了,直接插入”);

break;

} else if (temp.next.no > index) {

System.out.println(“找到了位置”);

break;

} else if (temp.next.no == index) {

flag = true;

break;

}

temp = temp.next;

}

if (flag) {

System.out.println(“位置已经存在”);

} else {

/**

* 先连接后面的

*/

if (temp.next != null) {

temp.next.pre = node; // 将后一个元素的pre于当前节点的pre相连

node.next = temp.next;

}

/**

* 在连接前面的

*/

temp.next = node;

node.pre = temp;

}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • }

    class Node {

    public int no;

    public String name;

    public String bName;

    public Node pre; // 指向上一个结点

    public Node next; // 指向下一个结点

    public Node(int no, String name, String bName) {

    this.no = no;

    this.name = name;

    this.bName = bName;

    }

    @Override

    public String toString() {

    return “Node{” +

    “no=” + no +

    “, name='” + name + ”’ +

    “, bName='” + bName + ”’ +

    ‘}’;

    }

    }

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2021年3月10日
    下一篇 2021年3月10日

    相关推荐