题解 | #输出单向链表中倒数第k个结点#

输出单向链表中倒数第k个结点

http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d

import java.util.Scanner;

public class Main { public static void main(String[] args) throws Exception{ Scanner in = new Scanner(System.in); while (in.hasNext()){ //1 2 3 4 5 6 7 8 SlingleLinkList nodeList = new SlingleLinkList(); int length = Integer.parseInt(in.next()); int[] arr = new int[length]; for (int i = 0; i < length; i++) { arr[i] = Integer.parseInt(in.next()); nodeList.addNode(new SingleLinkNode(arr[i])); } int index = Integer.parseInt(in.next()); System.out.println(nodeList.findLastIndexSingleLinkNode(length,index).getValue() ); } } } class SlingleLinkList { private SingleLinkNode headNode=null;

public SingleLinkNode getHeadNode() {
    return this.headNode;
}

//查找单链表中的倒数第K个节点,找到了则返回该节点,找不到就返回空
public SingleLinkNode findLastIndexSingleLinkNode(int length,int index){
    SingleLinkNode head = this.headNode;
    if(head.next==null){
        return new SingleLinkNode(0);//没有找到
    }
    //第二次遍历size-index 位置,就是我们倒数的第K个节点
    //先做一个index的校验
    if(index <=0 || index >length){
        return new SingleLinkNode(0);
    }
    //定义给辅助变量,for循环定位到倒数的index
    SingleLinkNode cur = head;//3
    for(int i=0;i<length - index;i++){
        cur = cur.next;

    }
    return cur;
}

public void addNode(SingleLinkNode node) throws Exception{ //头插法
    if (this.headNode==null) {
        this.headNode = node;
        return;
    }
    SingleLinkNode temp = this.headNode;
    while(true){
        if (temp.next!=null){
            temp = temp.next;
        }else {
            temp.next = node;
            break;
        }
    }
}


//顺便把逆转链表一起复习了
public void reverseNode() throws Exception{ //反转链表
    SingleLinkNode lastNode;
    if (this.headNode==null || this.headNode.next==null) return;
    SingleLinkNode cur = this.headNode;//指针
    SingleLinkNode temp;
        //第一次
        temp = cur.next;
        lastNode = cur;
        cur = temp;
        lastNode.next=null;
    while (cur.next!=null){
        temp = cur.next;
        cur.next = lastNode;
        lastNode= cur;
        cur = temp;
    }
        //最后一次
        cur.next = lastNode;
        this.headNode = cur;
}

} class SingleLinkNode { int value; SingleLinkNode next;

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

public SingleLinkNode(int value, SingleLinkNode next) {
    this.value = value;
    this.next = next;
}

public int getValue() {
    return value;
}

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务