鏈表是一種常用的數據結構,鏈表是通過自引用結構體類型的指針成員指向結構體本身建立起來的。
如下:
typedef struct node
{
int data;
sruct node * next;
}ListNode;
對鏈表的操作主要有創建,插入,刪除等,下面分別講解:
1.創建
創建鏈表就是創建一個空的鏈表,首先明確任務爲創建一個鏈表,我們需要做的是,創建一個頭結點head,並將頭結點的next設置爲NULL
如下:
ListNode* CreateList()
{
ListNode* head = NULL;
head = new ListNode();//創建一個頭結點
head->next = NULL;//將頭結點next設置爲null
return head;
}
2.插入
鏈表的插入操作是在鏈表中插入一個節點,這裏有兩個方式,第一種方式,直接在鏈表末尾插入節點,第二種方式在指定位置插入節點
第一種方式:需要做的是,找到鏈表的末尾節點,將末尾的節點的next指向我們需要插入的節點p,然後將p的next設置爲NULL
如下:
int InsertNode(ListNode* head, ListNode* p)
{
if(head&&p)
{
ListNode* ptmp = head;
while(ptmp->next) //找到鏈表的末尾節點
{
ptmp = ptmp->next;
}
ptmp->next = p;//將末尾的節點的next指向我們需要插入的節點p
p->next = NULL;//將p的next設置爲NULL
}
return -1;
}
第二種方式:需要做的工作是,找到插入點i的位置節點ptmp,保存ptmp的next節點值,將ptmp的next節點指向需要插入的節點p,將p的next設置爲ptmp的next節點值
如下:
int InsertNode(ListNode*head, int i, ListNode* p)
{
i=0;
if(head&&p)
{
ListNode* ptmp = head;
while(i++)//找到插入點i的位置節點q
{
ptmp = ptmp->next;
if(!pTmp)//鏈表長度不足i,所以在最末尾插入
{
ptmp = p;
p->next = NULL;
return 0;
}
}
p->next = ptmp->next;//保存ptmp的next節點值,將p的next設置爲ptmp的next節點值
ptmp->next = p;//將ptmp的next節點指向需要插入的節點p
return 0;
}
return -1;
}
3.刪除
鏈表的刪除操作爲刪除指定的元素,我們需要知道被刪除節點的位置或者被刪除節點的內容,可以通過節點內容找到對應的節點位置,故只給出刪除對應位置節點的操作
我們需要做的工作是,找到刪除位置i對應的節點,保存刪除節點p的next值,釋放節點內存
如下:
int DelListNode(ListNode* head, int i)
{
if(!head)
return -1;
int j = 0;
ListNode* q = NULL;
ListNode* ptmp = head;
while(j++ < i)//找到節點i的位置節點q
{
ptmp = ptmp->next;
if(!pTmp)//鏈表長度不足i
{
return -1;
}
}
q = ptmp->next;//保存刪除節點
ptmp->next = q->next;//保存刪除節點p的next值
delete q;//釋放節點內存
return 0;
}
ps:水平有限,供參考使用。請大家批評指正,互相學習進步