單鏈表的各種操作 筆試 面試

2021-06-26 03:30:23 字數 2083 閱讀 9580

一、鍊錶與陣列的 區別

1、邏輯結構   陣列必須事先定義固定的長度  不能動態的增減   鍊錶是動態分配記憶體

2、記憶體結構   陣列從棧中分配空間   鍊錶在堆中

3、陣列在記憶體中順序儲存   鍊錶隨機儲存    陣列訪問效率高   鍊錶插入刪除方便

4、陣列存在越界問題 

定義表頭, 為方便操作 表頭資料域為空

二、單鏈表插入 刪除

bool insertlist(list head, type x, int index)

if(p==null) return error;

node *tmp = (node *)malloc(sizeof(node));

tmp->data = x;

tmp->next = p->next; //tmp的後繼指向原index位置的結點

p-next = tmp; //p的後繼為新結點

return ok;

}bool deletelist(list head, int index)// p->next為第index個

if(p==null || p->next==null || j > i) return error; //i可能為負值

node *tmp = p->next; //tmp指向第index個

p->next = tmp->next; //第index+1個代替index

free(tmp);//釋放空間

return ok;

}三、找出單鏈表中的倒數第k個元素

解題思路

1、先遍歷一遍 計算長度, 再找出後k個

2、雙路齊下  p1從第一位開始,p2從第k為開始遍歷  直到p2走到頭

思路2**:

node* find(node* head, int index)

while(p2!=null)

return p1;

}四、單鏈表反轉

解題思路:每次操作結點時  標註其前結點 後結點  對其進行操作

node* reverse(node *head)

}五、從尾到頭輸出單鏈表

1、遞迴輸出

2、非遞迴輸出

非遞迴操作  : 

1).可以使用 「四」 的**進行反轉  然後輸出

2).遍歷結點入棧 然後輸出

六、尋找單鏈表的中間結點

1、遍歷求長度length  然後再遍歷輸出

2、雙路齊下   p1走一步 p2走兩步 p2走到終點時 p1正好到中點

node* findmiddle(node *head)

return p1;

}七、單鏈表排序

與陣列排序區別不大,交換元素時 只交換資料域的內容就好。鍊錶的順序結構不用變化

八、單鏈表中任意 交換兩個元素 (要注意表頭)

將2個結點進行交換 要注意 next指標的 交換問題

//將p q結點交換

node* swap(node* head,node* p,node* q)

if(p==q)

else if(p->next == q)

else if(q->next == p)

else if(p!=q)

return head;

}九、檢測乙個較大的單鏈表是否有環

雙路齊下法  乙個走一步乙個走2步 看是否會相遇

十、判斷兩個(無環)單鏈表是否交叉

判斷最後乙個結點是否相同

十一、刪除單鏈表中的重複結點

雜湊, 建議一hash_map ,遍歷鍊錶 若結點出現重複則刪除

十二、合併兩個有序鍊錶(非交叉)

1、遞迴

node* merge(node* head1, node* head2)else

return head;

}2、非遞迴

node* merge(node*head , node* head1, node* head2)else

}if(head1==null)

tmp->next = head2;

if(head2==null)

tmp->next = head1;

return head;

}

單鏈表各種操作

終於自己寫出了關於單鏈表的操作,而不是看別人的,現在程式設計越來越有感覺了,自己編更好,別人的還看不懂,不知道他們的思路是什麼 單鏈表的建立,插入,刪除,排序,求長度。插入是按大小順序插入的。include include struct node void creat node void print...

單鏈表的各種操作

單鏈表的各種操作 define null 0 typedef char elemtype 字元型資料 typedef struct lnode setnull struct lnode p int length struct lnode p elemtype get struct lnode p,i...

單鏈表的各種操作

單鏈表的各種操作 define null 0 typedef char elemtype 字元型資料 typedef struct lnode elemtype data struct lnode next setnull struct lnode p int length struct lnode...