package pkg;
public class Node implements Comparable {
private Integer value;
private Node next;
public Node(){
}
public Node(Integer value, Node next) {
this.value = value;
this.next = next;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public int compareTo(Object o) {
Node another = (Node) o;
return value.compareTo(another.getValue());
}
}
package pkg;
public class IntegerList {
public IntegerList() {
first = null;
size = 0;
}
public void add(Node node) {
if(isEmpty()) {
first = node;
size = 1;
} else {
privateAddNode(node);
size++;
}
}
public boolean isEmpty() {
return first == null;
}
public Node getFirst() {
return first;
}
public int size() {
return size;
}
private void privateAddNode(Node node) {
Node currentNode = null, priorNode = null;
if(first.compareTo(node) >= 0) {
node.setNext(first);
first = node;
return;
}
priorNode = first;
currentNode = first.getNext();
while(currentNode != null) {
if(currentNode.compareTo(node) >= 0) {
priorNode.setNext(node);
node.setNext(currentNode);
return;
}
priorNode = currentNode;
currentNode = currentNode.getNext();
}
priorNode.setNext(node);
node.setNext(null);
}
private Node first;
private int size;
}
package pkg;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
IntegerList list1 = new IntegerList();
list1.add(new Node(Integer.valueOf(4), null));
list1.add(new Node(Integer.valueOf(5), null));
list1.add(new Node(Integer.valueOf(1), null));
list1.add(new Node(Integer.valueOf(3), null));
IntegerList list2 = new IntegerList();
list2.add(new Node(Integer.valueOf(-3), null));
list2.add(new Node(Integer.valueOf(5), null));
list2.add(new Node(Integer.valueOf(100), null));
list2.add(new Node(Integer.valueOf(100), null));
list2.add(new Node(Integer.valueOf(-3), null));
Node node = list2.getFirst();
while(node != null) {
int value = node.getValue().intValue();
list1.add( new Node(Integer.valueOf(value), null) );
node = node.getNext();
}
node = list1.getFirst();
while(node != null) {
System.out.println(node.getValue());
node = node.getNext();
}
}
}
控制台打印:
-3
-3
1
3
4
5
5
100
100
2008年8月22日 07:06
相关推荐
### 面试题二:寻找链表相交的第一个节点 对于两个链表,可能存在相交的情况,即它们共享一部分节点。为了找到相交的第一个节点,可以先计算出两个链表的长度差,然后让较长的链表先移动这个差值,之后两个链表同时...
关于链表的面试题主要考察应聘者对链表这种基本数据结构的理解和操作能力,下面详细讲解每个面试题所涉及的知识点。 题一检测单链表是否有环的知识点: 要检测链表是否有环,可以使用快慢指针的方法。具体操作为,...
【C语言链表类面试题】涉及的知识点主要包括链表数据结构、链表操作和算法设计。链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。 1. **链表逆置** 链表逆置是链表操作中的...
链表是一种基础且重要的数据结构,在计算机科学特别是数据结构...同时,熟悉常见的链表面试题,有助于提升解决实际问题的能力。通过深入学习和实践,我们可以掌握如何有效地利用链表这一数据结构来优化算法和程序设计。
链表通常由节点组成,每个节点包含数据部分和指向下一个节点的指针,最后一个节点指向null。链表分为单链表、双链表、循环链表等多种类型,其中单链表是最常见的形式。 单链表上插入一个元素通常需要O(n)的时间...
以下是一些关于C语言链表的面试题及其详细解释。 1. 什么是链表?请描述链表的种类。 链表是一种动态数据结构,它由一系列节点(通常包含数据和指向下一个节点的指针)组成。链表中的元素在内存中不是顺序存储的,...
链表分为单链表(每个节点只有一个指针指向下一个节点)、双链表(每个节点有两个指针,一个指向前一个节点,一个指向后一个节点)和循环链表(最后一个节点的指针指向首节点)。 2. **链表的操作** - 插入:在...
"算法大全-面试题-链表-栈-二叉树-数据结构"这个压缩包文件提供了丰富的知识资源,旨在帮助学习者深入理解和应用这些核心概念。 链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。链表由一...
然而,数组和链表有着根本的区别,这些区别决定了它们在不同的场景下的应用。 数组 数组是一种连续存储的数据结构,即数组中的元素在内存中是连续存储的。这使得数组在查找数据时效率非常高,因为内存地址是连续的...
通过深入理解和熟练掌握这些链表编程题,不仅可以提升对链表的理解,还能锻炼解决问题的能力,为后续学习更复杂的数据结构和算法打下坚实基础。无论是初学者还是有一定经验的程序员,都可以从这些经典题目中获益。
微软面试题,输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。适合新手入门结构清晰易懂
一个链表由多个节点组成,每个节点包含两部分:数据域(存储实际信息)和指针域(存储指向下一个节点的地址)。链表的类型可以分为单链表、双向链表和循环链表等,每种类型的链表都有其独特的操作方式和应用场合。 ...
java基础面试题反转链表本资源系百度网盘分享地址
java基础面试题链表中倒数第K个点
面试题集锦~需要面试的看看吧~ 本资源主要总结了面试中的一些常见问题和回答,涵盖了面向对象编程、数据结构、Java相关知识、数据库等方面的内容。下面我们将逐一详细解释每一个问题和回答。 1. 栈和队列的主要...
java基础面试题两个链表的第一个公共节点本资源系百度网盘分享链接
每个节点包含数据部分和一个指向下一个节点的指针。链表分为单向链表、双向链表和循环链表等类型。 1. **输出链表所有结点信息**: 在题目给出的`printlist`函数中,用于遍历链表并打印每个节点的信息。`while`...
本文档提供了一系列C++面试题,涵盖了内存拷贝、双向链表、费波那其数列、类的构造函数、析构函数和赋值函数、循环、单向链表类的实现、二叉树实现等多个方面的知识点。 内存拷贝 面试题:写一个函数,完成内存...