您的位置:首页 > 职场人生

某公司面试题,用递归求单链表中值最大的节点

2013-06-15 16:32 246 查看
如题:

    有某链表如下:

  public class LinkNode {

private int value;

private LinkNode nextNode;
}请用递归求链表值最大的节点,实现如下:
package com;

/**
* 递归获取单链表值最大的节点
*
* @author CaoZP
*
*/
public class LinkNode {

private int value;

private LinkNode nextNode;

public LinkNode() {

}

public LinkNode(int value) {
this.value = value;
}

public LinkNode(int value, LinkNode nextNode) {
this.value = value;
this.nextNode = nextNode;
}

public int getValue() {
return value;
}

public void setValue(int value) {
this.value = value;
}

public LinkNode getNextNode() {
return nextNode;
}

public void setNextNode(LinkNode nextNode) {
this.nextNode = nextNode;
}

@Override
public String toString() {
return "LinkNode [value=" + value + ", nextNode=" + nextNode + "]";
}

public void printNode()
{
StringBuilder str = new StringBuilder("[");
LinkNode node = getNextNode();
while(node!=null)
{
str.append(node.getValue()).append(",");
node = node.getNextNode();
}
str.append("]");
System.out.println(str);
}

public static void main(String[] args) {

LinkNode head = new LinkNode(123);
LinkNode node = new LinkNode(156);
LinkNode node1 = new LinkNode(0);
LinkNode node2 = new LinkNode(456);
LinkNode node3 = new LinkNode(-100);
LinkNode node4 = new LinkNode(2);

head.setNextNode(node);
node.setNextNode(node1);
node1.setNextNode(node2);
node2.setNextNode(node3);
node3.setNextNode(node4);

head.printNode();
// LinkNode maxNode = getMaxNode(head);
// System.out.println(maxNode);
LinkNode minNode = getMinNode(head);
System.out.println(minNode);

}

/**
* 获取链表中值最大的节点
*
* @param head
* @return
*/
public static LinkNode getMaxNode(LinkNode head) {
if(head ==null)
{
throw new NullPointerException("arg is null");
}
//nextNode为空说明到了链尾
if(head.getNextNode()==null)
{
return head;
}
//当前节点的值大于nextNode把nextNode的nexNode设为head的nextNode
if(head.getValue()>head.getNextNode().getValue())
{
LinkNode childNextNode = head.getNextNode().getNextNode();
head.setNextNode(childNextNode);
return getMaxNode(head);
}else{
//否则就比较nextNode和nextNode的nextNode
return getMaxNode(head.getNextNode());
}
}
/**
* 获取链表中值最大的节点
*
* @param head
* @return
*/
public static LinkNode getMinNode(LinkNode head) {
if(head ==null)
{
throw new NullPointerException("arg is null");
}
//nextNode为空说明到了链尾
if(head.getNextNode()==null)
{
return head;
}//0 15 56 -17 189
//当前节点的值大于nextNode把nextNode的nexNode设为head的nextNode
if(head.getValue()<head.getNextNode().getValue())
{
LinkNode childNextNode = head.getNextNode().getNextNode();
head.setNextNode(childNextNode);
return getMinNode(head);
}else{
//否则就比较nextNode和nextNode的nextNode
return getMinNode(head.getNextNode());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: