程序员面试经典--删除结点(仅能访问该结点)
来源:互联网 发布:华讯网络待遇怎么样 编辑:程序博客网 时间: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
- 程序员面试经典--删除结点(仅能访问该结点)
- 删除链表中某个结点,假设你只能访问该结点
- 输出单层结点之程序员面试经典
- 【Java】实现一个算法,删除单链表中间的某个结点,假定你只能访问该结点
- 程序员面试经典--创建二叉树层结点链表
- 程序员面试经典--二叉查找树节点的“下一个结点”
- 单链表中通过某一结点指针删除该结点
- pointer指向链表的某结点(非尾结点), 且不知道该结点的前驱结点(也不知道更前驱的结点), 请给出删除该结点的方法
- 【LeetCode-面试算法经典-Java实现】【083-Remove Duplicates from Sorted List(排序的单链表中删除重复的结点)】
- 《程序员面试金典》输出单层结点
- 程序员面试经典--链表环路检测与入口结点返回
- 程序员面试宝典(33)-在O(1)时间删除链表结点
- [C/C++程序员面试宝典] 程序员面试宝典(33)-在O(1)时间删除链表结点
- 删除单链表中重复结点(结点值为整数)
- 删除单链表(带头结点)的最小值结点
- 设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)。
- 8、一个单链表,不给头指针,只给出当前结点,删除该结点。
- 给定链表中间某结点指针,删除链表中该结点
- Effective Java 2nd笔记第二章第五条:避免使用终结方法
- Leetcode/array/Container With Most Water
- 单例模式-懒汉式
- Numpy多维数组保存文档时,解决报错TypeError: Mismatch 的方法
- springmvc快速入门
- 程序员面试经典--删除结点(仅能访问该结点)
- HUD 1233 还是畅通工程
- 封装一个简单的PHP连接MongoDB类
- Python 之生成器和迭代器
- A complete guide to using Keras as part of a TensorFlow workflow: tutorial
- 京东笔试之异或运算符
- MySQL系列之六:存储引擎
- Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0' or one of its dependencies
- LCNN论文阅读笔记