某公司面试题,用递归求单链表中值最大的节点
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());
}
}
}
有某链表如下:
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());
}
}
}
相关文章推荐
- 关于在链表中用递归形式,求出链表中的最大值,及节点数和平均值的函数
- 用递归求单链表中值最大的节点
- 466. 链表节点计数 (count-linked-list-nodes)(c++)----lintcode面试题之链表
- 剑指offer 面试题37—两个链表的第一个公共节点
- 372. 在O(1)时间复杂度删除链表节点 (delete-node-in-the-middle-of-singly-linked-list)(c++)----lintcode面试题之链表
- 剑指offer:面试题15:查找链表中倒数第 k 个节点 ,
- 面试题15:链表中倒数第k个节点
- 百度面试题 运用递归求最大重复数
- [剑指offer]面试题37.两个链表中的第一个公共节点
- 剑指Offer面试题:14.链表的倒数第k个节点
- 9. 微软面试题:求二叉树中节点间最大距离
- 剑指offer 面试题5 从尾到头打印链表(递归实现)
- 剑指Offer面试题22:链表中倒数第k个节点
- 面试题:链表中倒数第k个节点
- 剑指Offer面试题18:删除链表的节点
- 二叉搜索树的相关操作:插入节点,删除节点,排序,查找,最大值,最小值,前序,中序,后序遍历(主要用到递归的方法)
- 剑指Offer---面试题37:两单链表中第一个公共节点
- 在二进制树中的节点之间的最大距离(最长路径树)——递归解决方案
- [剑指offer][面试题37]两个链表的第一个公共节点
- 【面试题】删除链表中倒数第n个节点