节点类
/**
*题目:实现链表
*时间:2015年8月26日09:39:31
*文件:LinkNode.java
*作者:cutter_point
*/
package bishi.Offer50.y2015.m08.d26;
public class LinkNode
{
public int m_nValue;
public LinkNode m_pNext;
public LinkNode()
{
}
public LinkNode(int d)
{
m_nValue = d;
m_pNext = null;
}
public LinkNode(int data, LinkNode next)
{
this.m_nValue = data;
this.m_pNext = next;
}
}
链表类
/**
*题目:实现链表
*时间:2015年8月26日09:39:31
*文件:LinkNode.java
*作者:cutter_point
*/
package bishi.Offer50.y2015.m08.d26;
import bishi.Offer50.y2015.m08.d26.LinkNode;
import java.util.Stack;
public class LinkList
{
private LinkNode head; //头结点
public LinkList()
{
//构造函数创建头结点
head = new LinkNode();
}
/**
* 在链表末尾添加一个节点
* @param data
*/
public void addTail(int data)
{
LinkNode newNode = new LinkNode(data);
if(head == null || head.m_pNext == null)
{
if(head == null)
{
head = new LinkNode();
}
head.m_pNext = newNode;
}//if
else
{
LinkNode p = head.m_pNext;
while(p.m_pNext != null)
{
p = p.m_pNext;
}//while
p.m_pNext = newNode;
}//else
}
/**
* 移除链表中的第一个data
* @param data
* @throws Exception
*/
public int removeNode(int data) throws Exception
{
if(head == null)
return -1;
LinkNode p = head, q = p.m_pNext;
while(q != null)
{
if(q.m_nValue == data)
break;
else
{
p = q;
q = q.m_pNext;
}//else
}//while
if(q == null)
throw new Exception("找不到数据");
p.m_pNext = q.m_pNext;
q.m_pNext = null;
return q.m_nValue;
}
/**
* 在链表中找到第一个出现data的位置,是链表中的第几个节点(包括头结点)
* @param data
* @return
*/
public LinkNode findNode(int data)
{
LinkNode p = head;
while(p != null)
{
if(p.m_nValue == data)
{
break;
}//if
else
{
p = p.m_pNext;
}//else
}//while
if(p == null)
{
return null;
}//if
return p;
}
public LinkNode getHead()
{
return head;
}
/**
* 我们借助栈,逆序打印链表
* @param link
*/
public static void PrintListReversingly_Iteratively(LinkList link)
{
if(link == null || link.head == null)
return;
if(link.head != null && link.head.m_pNext == null)
return;
Stack<LinkNode> nodes = new Stack<LinkNode>();
LinkNode p = link.head.m_pNext;
while(p != null)
{
nodes.push(p);
p = p.m_pNext;
}//while
while(!nodes.empty())
{
p = nodes.pop();
System.out.print(p.m_nValue + "\t");
}//while
}
/**
* 逆序输出我们链表
* @param pHead
*/
public static void PrintListReversingly_Recursively(LinkNode pHead)
{
if(pHead != null)
{
if(pHead.m_pNext != null)
{
PrintListReversingly_Recursively(pHead.m_pNext);
}//if
System.out.print(pHead.m_nValue + "\t");
}//if
}
public static void main(String[] args)
{
LinkList link = new LinkList();
link.addTail(8);link.addTail(7);link.addTail(6);link.addTail(5);link.addTail(4);link.addTail(3);
link.addTail(2);link.addTail(1);link.addTail(0);link.addTail(-1);link.addTail(-2);link.addTail(-3);
PrintListReversingly_Iteratively(link);
System.out.println();
PrintListReversingly_Recursively(link.head);
}
}