java常用数据结构---线性表---链式存储
2017-06-22 09:10
381 查看
public class Node {
Node next = null;
int data;
public Node(int data) {
this.data = data;
}
public Node() {
}
Node head = null;
public void addNode(int d) {
Node newNode = new Node(d);
if (head == null) { // 在表头插入
head = newNode;
return;
}
Node tmp = head;
while(tmp.next !=null){
tmp = tmp.next;
}
tmp.next = newNode; // 在表尾插入
}
public boolean deleteNode(int index){
if(index <1 || index> length()){
return false;
}
if(index == 1){
head = head.next;
return true;
}
int i =1;
Node preNode = head; // 记录删除前一个节点
Node curNode = preNode.next;
while(curNode != null){
if(i == index){
preNode.next = curNode.next;
return true;
}
preNode = curNode;
curNode = curNode.next;
i++;
}
return true; // 一个也没有就返回true
}
public int length(){ //计算长度
int length =0;
Node tmp = head;
while(tmp != null){
length++;
tmp = tmp.next;
}
return length;
}
// 对链表进行排序
public Node orderList(){
Node nextNode = null;
int temp =0;
Node curNode = head;
while(curNode != null){ // 遍历当前节点
nextNode = curNode.next;
while(nextNode != null){ // 遍历下一个节点
if(curNode.data > nextNode.data){
temp = curNode.data;
curNode.data = nextNode.data;
nextNode.data = temp;
}
nextNode = nextNode.next;
}
curNode = curNode.next;
}
return head;
}
public void printList(){
Node tmp = head;
while(tmp != null){
System.out.print(+ tmp.data+"->");
tmp= tmp.next;
}
System.out.println();
}
// 删除重复数据
public void deleteDuplecate(Node head){
Node p = head;
while(p != null){ // 外循环
Node q = p;
while(q.next != null){ // 内循环
if(p.data == q.next.data){
q.next = q.next.next;
}else
q = q.next;
}
p = p.next;
}
}
public Node findElem(Node head,int k){
if(k <1 || k >this.length()){
return null;
}
Node p1= head;
Node p2 = head;
for(int i =0;i <k-1;i++){
p1= p1.next; // 找出间隔
}
while(p1 != null){ // 同时移动
p1 = p1.next;
p2 = p2.next;
}
return p2;
}
}
public class List {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Node list = new Node();
list.addNode(5);
list.addNode(0);
list.addNode(4);
list.addNode(2);
System.out.println("length=="+list.length());
System.out.println("before order");
list.printList();
list.orderList();
System.out.println("after order");
list.printList();
}
}
Node next = null;
int data;
public Node(int data) {
this.data = data;
}
public Node() {
}
Node head = null;
public void addNode(int d) {
Node newNode = new Node(d);
if (head == null) { // 在表头插入
head = newNode;
return;
}
Node tmp = head;
while(tmp.next !=null){
tmp = tmp.next;
}
tmp.next = newNode; // 在表尾插入
}
public boolean deleteNode(int index){
if(index <1 || index> length()){
return false;
}
if(index == 1){
head = head.next;
return true;
}
int i =1;
Node preNode = head; // 记录删除前一个节点
Node curNode = preNode.next;
while(curNode != null){
if(i == index){
preNode.next = curNode.next;
return true;
}
preNode = curNode;
curNode = curNode.next;
i++;
}
return true; // 一个也没有就返回true
}
public int length(){ //计算长度
int length =0;
Node tmp = head;
while(tmp != null){
length++;
tmp = tmp.next;
}
return length;
}
// 对链表进行排序
public Node orderList(){
Node nextNode = null;
int temp =0;
Node curNode = head;
while(curNode != null){ // 遍历当前节点
nextNode = curNode.next;
while(nextNode != null){ // 遍历下一个节点
if(curNode.data > nextNode.data){
temp = curNode.data;
curNode.data = nextNode.data;
nextNode.data = temp;
}
nextNode = nextNode.next;
}
curNode = curNode.next;
}
return head;
}
public void printList(){
Node tmp = head;
while(tmp != null){
System.out.print(+ tmp.data+"->");
tmp= tmp.next;
}
System.out.println();
}
// 删除重复数据
public void deleteDuplecate(Node head){
Node p = head;
while(p != null){ // 外循环
Node q = p;
while(q.next != null){ // 内循环
if(p.data == q.next.data){
q.next = q.next.next;
}else
q = q.next;
}
p = p.next;
}
}
public Node findElem(Node head,int k){
if(k <1 || k >this.length()){
return null;
}
Node p1= head;
Node p2 = head;
for(int i =0;i <k-1;i++){
p1= p1.next; // 找出间隔
}
while(p1 != null){ // 同时移动
p1 = p1.next;
p2 = p2.next;
}
return p2;
}
}
public class List {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Node list = new Node();
list.addNode(5);
list.addNode(0);
list.addNode(4);
list.addNode(2);
System.out.println("length=="+list.length());
System.out.println("before order");
list.printList();
list.orderList();
System.out.println("after order");
list.printList();
}
}
相关文章推荐
- 【数据结构】线性表链式存储_LinkList
- JAVA版数据结构之栈的链式存储实现
- java中线性表,链表,哈希表是常用的数据结构
- 数据结构和算法笔记 lesson4 线性表链式存储结构 单链表
- 数据结构_线性表_顺序存储之1顺序栈2共享栈_链式存储之链栈_栈的应用举例
- 数据结构:线性表的链式存储(单向链表)--Java实现
- 2-5-归并链式存储的单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构_线性表_链式存储_单链表 的基本操作
- 2-4-单链表链式存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- [置顶] 数据结构——线性表链式存储
- 2015年考研核心考点命题思路解密——数据结构 第二章 线性表 考点3 线性表的链式存储(选择题部分)
- Java实现链式存储的线性表
- 常用数据结构-线性表及Java 动态数组 深究
- 数据结构_线性表_链式存储_单向循环链表的基本操作
- 常用数据结构之链式存储队列
- 线性表 顺序存储 链式存储 ---java实现
- JAVA数据结构 线性表的链式存储及其实现
- 线性表,链表,哈希表是常用的数据结构,在进行Java开发时
- 数据结构1——线性表链式存储 java
- 数据结构_线性表_链式存储_双向循环链表的基本操作