1. 程式人生 > >最簡單的單鏈表,算是模板吧

最簡單的單鏈表,算是模板吧

大部分是師哥寫的,只有刪除節點部分是我寫的,=。=,菜。。。

品質值得信賴,=。=

#include <bits/stdc++.h>

using namespace std;
struct Node
{
    int data;
    Node * next;
};

Node * CreatLink(int LinkNumber, int data[])//連結串列個數,data
{
    if (LinkNumber <= 0)
    {
        cout << "建立連結串列結點數目小於1.\n";
    }

    Node *start = new Node;//定義一個結構體指標,指向新結構體,即新節點。
    start->data = data[0];
    start->next = NULL;

    Node * Head, *pre;
    Head = start;

    for (int i = 1; i < LinkNumber; ++i)
    {
        pre = start;//指向上一個節點
        start = new Node;
        pre->next = start;
        pre->data = data[i];
    }

    return Head;
}

bool Insert(Node * Head, int position, int data)//插入
{
    if (position == 1)
    {
        Node * start = new Node;
        start->data = data;
        start->next = Head;//結構體成員next
        Head = start;//將頭節點換了
    }
    else
    {
        int _count = 1;
        Node * current = Head;
        while (_count != position - 1)
        {
            _count++;
            current = current->next;//連結串列的缺點,從頭開始找
        }
        Node * NewNode = new Node;
        NewNode->data = data;
        if (current->next != NULL)
        {
            NewNode->next = current->next;//指標!成員?
            current->next = NewNode;//next存指標
        }
        else
        {
            current->next = NewNode;
            NewNode->next = NULL;
        }
    }
    return true;
}

bool Delete(Node *Head,int position,int data)
{
    if(position==1)
    {
        Node *p;
        p=Head;
        Head = Head->next;
        free(p);
    }
    else
    {
        Node *z,*x;
        z=Head;
        for(int i=1; i<=position-1; i++)
        {
            x=z;
            z=z->next;
        }
        if(z->next!=NULL)
        {
            x->next=z->next;
            free(z);
        }
        else
        {
            x->next=NULL;
            free(z);
        }
    }
    return true;
}

int main()
{
    printf("這裡啥也沒有=。=");//可以寫data陣列資料,再存進
    return 0;
}