国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

華為機試在線訓練-牛客網(26)輸出單向鏈表中倒數第k個結點

2019-11-08 18:46:33
字體:
來源:轉載
供稿:網友

題目描述

輸入一個單向鏈表,輸出該鏈表中倒數第k個結點,鏈表的倒數第1個結點為鏈表的尾指針。

鏈表結點定義如下:

struct ListNode

{

      int       m_nKey;

      ListNode* m_pNext;

};

詳細描述:

接口說明

原型:

ListNode* FindKthToTail(ListNode* pListHead, unsignedint k);

輸入參數:

        ListNode* pListHead  單向鏈表

     unsigned int k  倒數第k個結點

輸出參數(指針指向的內存區域保證有效):

    無

返回值:

        正常返回倒數第k個結點指針,異常返回空指針

 

 

輸入描述:

輸入說明1 輸入鏈表結點個數2 輸入鏈表的值3 輸入k的值

輸出描述:

輸出一個整數

輸入例子:
81 2 3 4 5 6 7 84
輸出例子:
5

頭插法直接倒置鏈表是種思路。我是采用的另一種思路:

在頭結點的數據域中存放鏈表長度,輸出倒數第k個元素其實可以正向遍歷鏈表,

輸出第(l-k)個元素,l為鏈表的長度。

另外,OJ無法判斷你代碼里寫的是哪種鏈表,

所以投機取巧地辦法是用個數組或vector直接存,然后下標訪問。

但是題目的原意應該是考察單鏈表的逆置,而不是建表的時候就倒置或者間接地解決。

完整AC的代碼(采用頭結點數據域存放鏈表長度的辦法)

#include <iostream>using namespace std;typedef struct SListNode{    int data;    struct SListNode *next;}SListNode;typedef SListNode* SList;void createSList(SListNode *head,int data[],int n){    SListNode *p;    head->data=n;    head->next=NULL;    for(int i=n-1;i>=0;i--){        p=(SListNode*)malloc(sizeof(SListNode));        p->data=data[i];        p->next=head->next;        head->next=p;    }}int main(){    int n;    while(cin>>n){                int *data=new int[n];        for(int i=0;i<n;i++){            cin>>data[i];        }        SList slist=(SList)malloc(sizeof(SListNode));        createSList(slist,data,n);        int k,val;        cin>>k;        SListNode *p=slist->next;        for(int i=0;i<slist->data-k;i++){            p=p->next;        }		if(p)cout<<p->data<<endl;        else cout<<0<<endl;    }}

經驗記錄:

1.一般本地代碼測試能運行,OJ上出現段錯誤提示,很可能是部分邊界情況或特殊情況沒考慮到,使得數組或容器越界訪問,本地測試時沒考慮到這類測試用例。

2.如果本地測試正常,OJ上出現答案被截斷的情況,很可能是輸出格式不對;也可能是特殊情況沒考慮到,從某一個測試值開始出錯,后面全部截斷。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通山县| 阳江市| 兴和县| 太康县| 武胜县| 资源县| 汾阳市| 都兰县| 曲阜市| 南阳市| 仪陇县| 恭城| 广西| 三穗县| 毕节市| 崇义县| 蛟河市| 嘉兴市| 攀枝花市| 兰溪市| 金乡县| 元谋县| 长沙市| 阜平县| 疏勒县| 乌恰县| 凤城市| 改则县| 方山县| 灵武市| 房产| 濉溪县| 泰和县| 额尔古纳市| 余干县| 香格里拉县| 屯昌县| 平武县| 永德县| 忻城县| 二手房|