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

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

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

#include<bits/stdc++.h>
using namespace std;
struct ListNode
{
    int val;
    ListNode* next;
     //三种不同参数的构造函数
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x):val(x), next(nullptr){};   
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};
int nodeVal(ListNode*, int);   //函数提前声明一下
int main(){
    int n,val,num;
    while(cin>>n){
        ListNode* head=new ListNode(-1);//正序构建链表
        ListNode* p=head;
        for(int i=0;i<n;i++){
            cin>>val;
            ListNode* tmp=new ListNode(val);  
            p->next=tmp;
            p=p->next;
        }
        cin>>num;
        int res=0;
        if(num>=1)
            res=nodeVal(head->next,num);//因为创建的是带头节点的单链表(head没有实际意义),
                                         //所以传入的参数是head->next, 而不是head
        cout<<res<<endl;       
    } 
    return 0;
}
//查找链表的倒数第k个节点[逆序]
int nodeVal(ListNode* head, int k){
    ListNode* fast = head;
    ListNode* slow = head;
    for(int i = 0; i < k; i++){   //快指针先行k步
        fast = fast->next;
    }
    while(fast != nullptr ){   //快慢指针同步,快指针先到底,慢指针指向倒数第k个
        fast = fast->next;    
        slow = slow->next;
    }
    return slow->val;
}

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务