天天看點

按規則插入結點,然後删除指定的結點。

輸入:

5 //長度

2 //第一個節點

3 2 //3插入第二個節點

4 3 //。。。

5 2 //。。。

1 4 //。。。

3 //删除第三個節點

輸出:

2 5 1 4

有些地方是為了湊答案,連結清單的頭部插入和删除需要注意。

void insertLinkList(ListNode* &pListHead,int data,int position){
    ListNode *p = pListHead;
    int index = ;
    if (position==)
    {
        ListNode *q = new ListNode;
        q->m_nKey = data;
        q->m_pNext = pListHead;
        pListHead = q;
    }
    else{
        while (index++ < position)
        {
            p = p->m_pNext;
        }
        ListNode *q = new ListNode;
        q->m_nKey = data;
        q->m_pNext = p->m_pNext;
        p->m_pNext = q;
    }

}
void deleteNode(ListNode* &pListHead, int position){
    ListNode *p = pListHead;
    int index = ;
    while (index++ < position-)
    {
        p = p->m_pNext;
    }
    p->m_pNext = (p->m_pNext)->m_pNext;
}
int main()
{   
    //按規則插傳入連結表
    int length;
    cin >> length;
    int data;
    int position;
    ListNode* pListHead = NULL;
    ListNode* p = new ListNode;
    cin >> data;
    p->m_nKey = data;
    p->m_pNext = NULL;
    pListHead = p;
    int index = ;
    while (index++<length)
    {
        cin >> data;
        cin >> position;
        insertLinkList(pListHead,data,position);
    }
    cin >> position;
    deleteNode(pListHead, position);
    p = pListHead;
    while (p)
    {
        int data = p->m_nKey;
        cout << data ;
        if (p->m_pNext)
        {
            cout << " ";
        }
        p = p->m_pNext;
    }
    cout << endl;
    return ;
}
           

繼續閱讀