天青色等烟雨*^_^* 2021-05-31 10:11 采纳率: 50%
浏览 42
已结题

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

 

 

  • 写回答

4条回答 默认 最新

  • CSDN专家-Fay 2021-05-31 10:12
    关注

    是对概念不清楚,还是需要代码例子?我这有个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();
    	}
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line