华为面试题,有谁会做? 今天真郁闷,上午去华为面试,考的不太理想,其中有一题面试题一直没弄懂怎么做,题目如下:设计一个双链表类,然后在类里面分别写增加,插入,删除节点的方法!有那位高手会做啊,请指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也知道要用LinkedList,可是就是不知道程序应该怎么写,应该如从下手,郁闷啊!哪位高手能提供答案啊,小弟感激不尽! 我的理解,其实是让你实现一个简单的LinkList,先定义一个节点类,该类包含指向前一节点跟后一节点的两个节点对象。然后再定义一个List类,分别实现增加,修改,删除节点的方法,第一个节点特别注意一下就可以了。 class DQueue implements Collection{ private LinkedList lists ; public DQueue(){ lists = new LinkedList(); } public void put_front(Object v){ lists.addFirst(v); } public void put_back(Object v){ lists.addLast(v); } public Object get_front(){ return lists.removeFirst(); } public Object get_Back(){ return lists.removeLast(); } public boolean isEmpty(){ return lists.isEmpty(); } public int size(){ return lists.size(); } public boolean contains(Object o) { return lists.contains(o); } public Iterator iterator() { return lists.iterator(); } public Object[] toArray() { return lists.toArray(); } public Object[] toArray(Object a[]) { return lists.toArray(a); } public boolean add(Object o) { lists.addLast(o); return true; } public boolean remove(Object o) { return lists.remove(o); } public boolean containsAll(Collection c) { return lists.containsAll(c); } public boolean addAll(Collection c) { return lists.addAll(c); } public boolean removeAll(Collection c) { return lists.removeAll(c); } public boolean retainAll(Collection c) { return lists.retainAll(c); } public void clear() { lists.clear(); }} LinkedList avXList = new LinkedList()while(rs.next()){ avXList.add(rs.getString("X").trim());} aXList = new String[aXList.size()]; avXList.toArray(aXList);rs.close(); 注意是设计一个双向链表,不是用现成的:package linkbean;public class DLink { private Object data; private DLink next; private DLink pre; /** * @return Returns the data. */ public Object getData() { return data; } /** * @param data The data to set. */ public void setData(Object data) { this.data = data; } /** * @return Returns the next. */ public DLink getNext() { return next; } /** * @param next The next to set. */ public void setNext(DLink next) { this.next = next; } /** * @return Returns the pre. */ public DLink getPre() { return pre; } /** * @param pre The pre to set. */ public void setPre(DLink pre) { this.pre = pre; } }DoubleLinkTable.java:public class DoubleLinkTable { /** * 用于存储临时数据 * */ private DLink myDlink; /** * 指向头一个节点高 * */ private DLink frist; /** * 当前操作节点 * */ private DLink now; /** * 指向最后一个节点 * */ private DLink last; /** * * 构建器用于初始化双向链表*/ public DoubleLinkTable(){ this.frist = new DLink(); this.last = new DLink(); this.frist.setNext(this.last); this.last.setPre(this.frist); this.now = this.frist; } /** * 该方法在链表的末尾加上一个节点 * */ public void add(Object data){ this.myDlink = new DLink(); this.myDlink.setData(data); this.myDlink.setPre(this.last); this.last.setNext(this.myDlink); this.last = this.myDlink; this.myDlink = null; } /** * 该方法在链表的当前位置插入一个节点 * */ public void insert(Object data){ this.myDlink = new DLink(); this.myDlink.setData(data); this.myDlink.setNext(this.now.getNext()); this.myDlink.setPre(this.now); this.now.getNext().setPre(this.myDlink); this.now.setNext(this.myDlink); this.myDlink = null; } /** * 该方法将删除指定的节点 * 如果删除的是第一个节点,那么index的值应该为0 * 如果删除第一个那么index应该为1 * 如果超界将会弹出异常 * */ public void delete(int index){ this.myDlink = this.frist; for(int i = 0 ; i < index ; i++){ this.myDlink = this.myDlink.getNext(); if(this.myDlink == null){ throw new RuntimeException("溢出!"); } } /*这里已没有考虑当删除头节点或尾节点的情况*/ this.myDlink.getNext().setPre(this.myDlink.getPre()); this.myDlink.getPre().setNext(this.myDlink.getNext()); this.myDlink = null; } /** * 该方法负责向后移动节点 * */ public void next(){ this.now = this.now.getPre(); } /** * 该方法负责向前移动节点 * */ public void pre(){ this.now = this.now.getPre(); }} 作为野战军的我,鄙视华为,tmd非要四级证 java se,求教 java 做拼图游戏 用什么算法啊 本版精华贴的一个疑问 为什么两者的结果不相同? 多个线程wait(),其中一个被notify(),可行吗? java新手提问:请问如何从命令行里读入一个int型数据 如何解决服务器不支持生僻的汉字的问题 如何获得磁盘空间? 如何用JVADOC工具 和SRC。JAR 文件生成API 文档 java通过jacob调用ocx 方法可以使用 事件响应不了 写了个程序,有点问题,大家帮忙看看吧! 求一个3阶,4阶幻方的程序,谢谢!
private LinkedList lists ;
public DQueue(){
lists = new LinkedList();
}
public void put_front(Object v){
lists.addFirst(v);
}
public void put_back(Object v){
lists.addLast(v);
}
public Object get_front(){
return lists.removeFirst();
}
public Object get_Back(){
return lists.removeLast();
}
public boolean isEmpty(){
return lists.isEmpty();
}
public int size(){
return lists.size();
}
public boolean contains(Object o) {
return lists.contains(o);
}
public Iterator iterator() {
return lists.iterator();
}
public Object[] toArray() {
return lists.toArray();
}
public Object[] toArray(Object a[]) {
return lists.toArray(a);
}
public boolean add(Object o) {
lists.addLast(o);
return true;
}
public boolean remove(Object o) {
return lists.remove(o);
}
public boolean containsAll(Collection c) {
return lists.containsAll(c);
}
public boolean addAll(Collection c) {
return lists.addAll(c);
}
public boolean removeAll(Collection c) {
return lists.removeAll(c);
}
public boolean retainAll(Collection c) {
return lists.retainAll(c);
}
public void clear() { lists.clear(); }
}
while(rs.next())
{
avXList.add(rs.getString("X").trim());
}
aXList = new String[aXList.size()];
avXList.toArray(aXList);
rs.close();
package linkbean;public class DLink {
private Object data;
private DLink next;
private DLink pre;
/**
* @return Returns the data.
*/
public Object getData() {
return data;
}
/**
* @param data The data to set.
*/
public void setData(Object data) {
this.data = data;
}
/**
* @return Returns the next.
*/
public DLink getNext() {
return next;
}
/**
* @param next The next to set.
*/
public void setNext(DLink next) {
this.next = next;
}
/**
* @return Returns the pre.
*/
public DLink getPre() {
return pre;
}
/**
* @param pre The pre to set.
*/
public void setPre(DLink pre) {
this.pre = pre;
}
}DoubleLinkTable.java:
public class DoubleLinkTable {
/**
* 用于存储临时数据
* */
private DLink myDlink;
/**
* 指向头一个节点高
* */
private DLink frist;
/**
* 当前操作节点
* */
private DLink now;
/**
* 指向最后一个节点
* */
private DLink last;
/**
*
* 构建器用于初始化双向链表*/
public DoubleLinkTable(){
this.frist = new DLink();
this.last = new DLink();
this.frist.setNext(this.last);
this.last.setPre(this.frist);
this.now = this.frist;
}
/**
* 该方法在链表的末尾加上一个节点
* */
public void add(Object data){
this.myDlink = new DLink();
this.myDlink.setData(data);
this.myDlink.setPre(this.last);
this.last.setNext(this.myDlink);
this.last = this.myDlink;
this.myDlink = null;
}
/**
* 该方法在链表的当前位置插入一个节点
* */
public void insert(Object data){
this.myDlink = new DLink();
this.myDlink.setData(data);
this.myDlink.setNext(this.now.getNext());
this.myDlink.setPre(this.now);
this.now.getNext().setPre(this.myDlink);
this.now.setNext(this.myDlink);
this.myDlink = null;
}
/**
* 该方法将删除指定的节点
* 如果删除的是第一个节点,那么index的值应该为0
* 如果删除第一个那么index应该为1
* 如果超界将会弹出异常
* */
public void delete(int index){
this.myDlink = this.frist;
for(int i = 0 ; i < index ; i++){
this.myDlink = this.myDlink.getNext();
if(this.myDlink == null){
throw new RuntimeException("溢出!");
}
}
/*这里已没有考虑当删除头节点或尾节点的情况*/
this.myDlink.getNext().setPre(this.myDlink.getPre());
this.myDlink.getPre().setNext(this.myDlink.getNext());
this.myDlink = null;
}
/**
* 该方法负责向后移动节点
* */
public void next(){
this.now = this.now.getPre();
}
/**
* 该方法负责向前移动节点
* */
public void pre(){
this.now = this.now.getPre();
}
}