程序员面试经典--删除结点(仅能访问该结点)

来源:互联网 发布:华讯网络待遇怎么样 编辑:程序博客网 时间:2024/06/06 03:29

2.3问题:

实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。

思考:

题目给出,访问不到链表首结点,只能访问那个待删除结点。可以将该结点的后继结点数据拷贝到当前结点,然后删除这个后继结点。

import java.util.*;//节点类class Node {protected Node next; //指针域protected int data;//数据域 public Node( int data) {this.data = data;} //显示此节点public void display() {System. out.print( data + " ");}}//单链表class LinkList {public Node first; // 定义一个头结点private int pos = 0;// 节点的位置public LinkList() {this.first = null;//this代表当前类}// 插入一个头节点public void addFirstNode( int data) {Node node = new Node(data);node. next = first;first = node;}// 删除一个头结点,并返回头结点public Node deleteFirstNode() {Node tempNode = first;first = tempNode. next;return tempNode;}// 在任意位置插入节点 在index的后面插入public void add(int index, int data) {Node node = new Node(data);Node current = first;Node previous = first;while ( pos != index) {previous = current;current = current. next;pos++;}node. next = current;previous. next = node;pos = 0;}// 删除任意位置的节点public Node deleteByPos( int index) {Node current = first;Node previous = first;while ( pos != index) {pos++;previous = current;current = current. next;}if(current == first) {first = first. next;} else {pos = 0;previous. next = current. next;}return current;}// 根据节点的data删除节点(仅仅删除第一个)public Node deleteByData( int data) {Node current = first;Node previous = first; //记住上一个节点while (current. data != data) {if (current. next == null) {return null;  }previous = current;current = current. next;}if(current == first) {first = first. next;} else {previous. next = current. next;}return current;}// 显示出所有的节点信息public void displayAllNodes() {Node current = first;while (current != null) {current.display();current = current. next;}System. out.println();}// 根据位置查找节点信息public Node findByPos( int index) {Node current = first;while( pos != index) {current = current. next;pos++;}pos = 0;return current;}// 根据数据查找节点信息public Node findByData( int data) {Node current = first;while (current. data != data) {   if (current. next == null)return null;current = current. next;}return current;}}class deleteNode{public static void main(String args[]){LinkList linkList = new LinkList();linkList.addFirstNode(19);//19linkList.addFirstNode(18);//18,19linkList.addFirstNode(15);//15,18,19linkList.add(1, 16); //15,16,18,19linkList.add(2, 17); //15,16,17,18,19linkList.add(3, 17); //15,16,17,17,18,19linkList.displayAllNodes();Node node;node = linkList.findByPos(3);System.out.println("Node-data:"+node.data);if(deleteNode(node)){System.out.println("Deleted!!!");linkList.displayAllNodes();}else{System.out.println("No such node!!!");}}public static boolean deleteNode(Node n){if(n==null||n.next==null){return false;}Node next =n.next;n.data=next.data;n.next=next.next;return true;}}



0 0
原创粉丝点击