面試中單鏈表的相關操作也是常考的內容,本博文也是之前學習時的筆記,在此記錄下來,以便日後用到,同時歡迎批評指正。
一、基本操作typedef struct lnode
2.鍊錶的銷毀
void
destorylist(linklist l)
else
l->next = ptemp;}}
3.鍊錶的判空
bool
listempty(linklist l)
else
return false;
}
4.鍊錶的長度
int listlength(linklist l)
return nodecount;
}5.鍊錶的索引
int getelem(linklist l,int i,int* e)
if(!ptemp || j>i)
*e = ptemp->data;
return *e;
}6.鍊錶的插入
void insert(linklist l,int i,int e)
if(!ptemp || j>i-1)
ins = (linklist)malloc(sizeof(lnode));
if(ins==null) printf("
allocate memory error!\n
");ins->data = e;
ins->next = ptemp->next;
ptemp->next = ins;
}7.鍊錶的刪除
void delete(linklist l,int i,int e)
if(!(ptemp->next) || j>i-1)
del = ptemp->next;
ptemp->next = del->next;
e = del->data;
free(del);
}8. 鍊錶的建立void
createlist(linklist &l,
intn)
l->next=null;
for( i=0;isizeof(lnode));
scanf(&p->data);
p->next=l->next;
l->next = p;}}
void createlist(linklist &l,int n)
l->next = null;
pre = l;
for(i=0;isizeof(lnode));
scanf(&p->data);
pre ->next = p;
pre = p;
}pre->next = null;
}二、其他操作
1.鍊錶的反轉
listlist reverselist(linklist l )
l->next = prev;
return l;
}2.刪除乙個元素x
listlist reverselist(linklist l )
l->next = prev;
return l;
}3.刪除所有重複的元素
void
deleteallx(linklist l)
else
}p = p->next;}}
4.判斷鍊錶是不是有環
bool isloop(linklist head)
return !(fast == null || fast->next == null);
}5.將鍊錶分為兩個鍊錶,乙個為奇數序的元素,另乙個為偶數序的元素
void splice(linklist la, linklist lb)
pb->next = null;
}6.單鏈表的插入排序
void insertsort(linklist l)
p->next = q->next;
q->next = r;
pre->next = q;
}else
p = p->next;
}}7.單鏈表的選擇排序
void
selectsort(linklist l)
if(r != p)
p = p->next;}}
資料結構之鍊錶操作
線性表鏈式儲存結構定義 為了表示每個資料元素ai與其後繼資料元素ai 1之間的邏輯關係,對資料元素ai來說,除了儲存其本身資訊外,還需儲存乙個指示其直接後繼的資訊。我們把儲存資料元素的域稱為資料域,把儲存直接後繼位置的域稱為指標域。指標域中儲存的資訊稱為指標或鏈。這兩部分資訊組成資料元素ai的儲存影...
資料結構之鍊錶操作
1 基本概念 鏈式儲存結構不需要用位址連續的儲存單元來實現,而是通過 鏈 建立起資料元素之間的順序關係,因此它不要求兩個在邏輯上相鄰的資料元素在物理邏輯上也相鄰。從而,在插入和刪除元素的時候,不需要對原來的資料元素進行移動,只需要改變鍊錶節點之間的指向關係即可,從而提公升了執行時效率。2 主要儲存結...
資料結構 鍊錶操作之反轉鍊錶
這兩天遇到幾個反轉鍊錶的題目,覺得比較有意思,這裡分享一下 1 給出乙個鍊錶,同時給出索引m和n,要求將位於m和n之間的節點反轉,然後返回結果。1 m n lengthof linklist eg 1 2 3 4 5 m 2,n 4 輸出 1 4 3 2 5 反轉鍊錶的時候,有乙個比較關鍵的技巧,比...