# 单向链表

[编辑]动态单链表

private Node firstNode;
private int length;

clear();
}

public void clear(){
firstNode=null;
length=0;
}

public Node getFirstNode(){
return firstNode;
}

Node node=new Node(data);
if(isEmpty()){
firstNode=node;
}else{
Node lastNode=getNodeAt(length);
lastNode.next=node;
}
length++;
return true;
}

public boolean isEmpty(){
//return length==0;
//use assert to get more details when error occurs
boolean result;
if(length==0){
assert firstNode==null;
result=true;
}else{
assert firstNode!=null;
result=false;
}
return result;
}

public void reverse(){
if(firstNode==null)return;
Node p=firstNode;//use p to traverse every node
Node previous=null;
while(p.next!=null){
Node q=p.next;// save p.next first because the next sentence changes p.next
p.next=previous;
previous=p;
p=q;
}
p.next=previous;
firstNode=p;//should not be ignored
}

//recursive
public Node reverseRecursive(Node p){
if(p==null)return null;
if(p.next==null){
firstNode=p;
return p;
}
Node q=p.next;
//reverse the remaining nodes,except p
//when recursive returns,you can regard the link as a link that has just two elements: p-->q
//so the last reversing is simple: q.next=p;p.next=null;
Node ph=reverseRecursive(q);
q.next=p;
p.next=null;
System.out.print("("+ph.data+")");//ph.data=1,always
return ph;
}

public void display(){
Node node=firstNode;
while(node!=null){
System.out.print(node.data+" ");
node=node.next;
}
System.out.println();
}
private Node getNodeAt(int position){
Node re=firstNode;
if(!isEmpty()&&position>1&&position<=length){
for(int count=1;count<position;count++){
re=re.next;
}
}
return re;
}

//use inner class
private class Node{
private int data;
private Node next;

private Node(int data){
this.data=data;
next=null;
}
}
}

----------------

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={1,2,3,4,5};
for(int each:a){
}
list.display();
list.reverse();
list.display();
list.reverseRecursive(list.getFirstNode());
list.display();
}

• 本文已收录于以下专栏：

## java单向链表排序，倒置，合并

• 2017年09月25日 11:18
• 3KB
• 下载

## 单向链表操作类模板实现代码

• 2017年09月19日 15:57
• 3KB
• 下载

## 单向链表的建立

• 2015年07月11日 14:40
• 4KB
• 下载

## 单向链表实现

• 2013年10月11日 10:35
• 1KB
• 下载

## 单向链表实现

• 2011年11月28日 23:36
• 14KB
• 下载

## C++单向链表模板实现

• 2012年09月23日 17:59
• 14KB
• 下载

## LeetCode Linked List Cycle II(找到带环单向链表的环起始位置)

• lqcsp
• 2014年04月06日 11:52
• 600

## Java 单向链表 插入与删除节点

• 2011年06月01日 20:44
• 2KB
• 下载

举报原因： 您举报文章：单向链表 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)