对链表操作一直过不去坎求大神指点

 

 

是对概念不清楚,还是需要代码例子?我这有个java模拟链表操作例子,题主可以放到自己开发工具中运行测试:


//链表类
public class Link {
	//节点类
	class Node {
		//数据域
		private String name;
		
		//链域 (自引用 保存下一个节点)
		private Node next;
		
		//前趋
		private Node prior;
		
		
		public Node(){}//空的构造函数
		public Node(String name){
			 this.name=name;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public Node getNext() {
			return next;
		}

		public void setNext(Node next) {
			this.next = next;
		}
		public Node getPrior() {
			return prior;
		}
		public void setPrior(Node prior) {
			this.prior = prior;
		}
		
		
	}
	

	Node head;// 头节点

	public Link() { // 初始化头结点
		head = new Node();
	}

	/**
	 * 添加节点(往链表后面添加节点)
	 * 
	 * @param name
	 */
	public void addNode(String name) {
		Node curr = head;// 把头结点赋给当前节点
		Node newNode = new Node(name);// 构造新节点

		while (true) {
			if (curr.getNext() == null) {
				curr.setNext(newNode);// 给当前节点设置下一个节点为新节点
				newNode.setPrior(curr);//新的节点的前趋设置为当前节点
				break;
			}
			curr = curr.getNext();// 把下一个节点赋给当前节点继续循环
		}
	}

	/**
	 * 根据位置插入节点 3 F
	 */
	public void insertNode(int i, String name) {
		Node curr = head;
		Node newNode = new Node(name);

		Node temp = null;
		for (int j = 0; j < i; j++) {
			temp = curr; // 第二个节点
			curr = curr.getNext();// 循环3次过后curr就是第三个节点
		}

		// 第二个节点指向新节点
		temp.setNext(newNode);

		// 新节点的下一个指向第3个节点
		newNode.setNext(curr);
	}

	/**
	 * 根据位置删除 3
	 */
	public void delById(int i) {
		Node curr = head;

		for (int j = 0; j < i - 1; j++) {
			curr = curr.getNext();
		}

		curr.setNext(curr.getNext().getNext());// 把第二个节点的下一个设置为第二个节点的下下个
	}

	/**
	 * 根据位置查找内容
	 */
	public void selbyid(int i) {
		Node curr = head;
		for (int j = 0; j < i; j++) {
			curr = curr.getNext();
		}
		System.out.println("你要查找的第" + i + "个节点的内容是" + curr.getName()+" 它的上一个节点是 "+curr.getPrior().getName());
	}

	/**
	 * 根据内容查找位置
	 */
	public void selname(String name) {
		Node curr = head.getNext();
		int i = 1;
		while (true) {
			if (curr == null) {
				System.out.println("你要查找的" + name + " 不存在");
				break;
			}

			if (curr.getName().equals(name)) {// 如果下一个节点的数据域和要查找的数据域一样
				System.out.println("你要查找的" + name + "在第" + i + "个位置!");
				break;
			} else {
				curr = curr.getNext();
				i++;// 位置++
			}
		}
	}

	/**
	 * 根据name删除
	 */
	public void delbyname(String name) {
		Node curr = head.getNext();
		Node temp = null;
		while (true) {
			if (curr.getName().equals(name)) {
				break;
			}
			temp = curr;
			curr = curr.getNext();
		}

		temp.setNext(temp.getNext().getNext());
	}
	
	
	//获取第一个
	//获取最后一个
	
	//添加到头部
	//添加到尾部
	
	//移除第一个
	//移除最后一个

	// 遍历链表
	public void display() {
		Node curr = head.getNext();// 从头节点的下一个节点开始遍历
		while (curr != null) {
			System.out.println(curr.getName());
			curr = curr.getNext();// 把下一个节点赋给当前节点
		}
	}

	
	//测试方法
	public static void main(String[] args) {
		Link l = new Link();

		l.addNode("A");
		l.addNode("B");
		l.addNode("C");
		l.addNode("D");
		l.addNode("E");
		
		
		//根据位置插入节点
		//l.insertNode(3, "F");
		///l.insertNode(4, "G");
		
		//根据位置删除
		//l.delById(3);
		
		//根据位置查找内容
		l.selbyid(3);
		
		//l.selname("F");
		
		//l.delbyname("C");
		
		//遍历
		l.display();
	}
}

 

这说的对啊,b->next就是c,一个节点就是本节点数据+下一个节点指针。

 

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632