鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。
以下簡單實現了鍊錶的一些操作,包括建立、增加節點、刪除節點、單鏈表逆置、合併有序鍊錶等。
一、鍊錶建立
鍊錶主要有三種形式,包括單鏈表、雙鏈表和迴圈鍊錶。
單鏈表每個節點只包含乙個後驅指標,雙鏈表節點同時包含乙個前驅指標和乙個後驅指標,迴圈鍊錶的尾節點的後驅指向頭節點。
**如下:
/*單鏈表節點結構*
/typedef struct nodetype
node;
/*雙鏈表節點結構*
/typedef struct dnodetype
dnode;
/*建立單鏈表*/
node * createlist(node *head)
return head;
}
/*建立雙鏈表*/
dnode * doublelist(dnode *head)
return head;}
建立迴圈鍊錶
/*建立迴圈鍊錶*/
node* cyclelist(node *head)
current->next=head; /*尾節點指向頭節點*/
return head;
}
/*插入節點*/
node *insertnode(node *head , char elem)
temp=(node*) malloc( sizeof(node) );
temp->elem=elem;
temp->next=null;
prev->next=temp; /*尾節點的後驅指向新節點*/
return head;
}
二、單鏈表逆置
單鏈表逆置在各公司的筆試題中比較常見,以下是其中一種實現。
演算法描述:將鍊錶中每乙個節點插入到頭結點之後。
/*單鏈表逆置*/
node *reverselist(node *head)
return head;
}
三、求單鏈表中間節點
在筆試題中比較常見,通常題目描述是:給出乙個單鏈表,不知道節點n的值,怎樣只遍歷一次就可以求出中間節點。
演算法描述:設立兩個指標p1,p2,p1每次移動1個節點位置,p2每次移動2個節點位置,當p2移動到尾節點時,p1指向中間節點。
求中間節點
/*求中間節點*/
node * middlenode(node *head)
return p1;
}
四、判斷鍊錶是否有環
判斷鍊錶是否有環即是判斷鍊錶是否為迴圈鍊錶,演算法較為簡單,一次遍歷判斷尾指標是否指向頭指標即可。
**如下:
判斷鍊錶是否有環
/*判斷鍊錶是否有環(迴圈鍊錶)*/
bool iscyclelist(node *head)
return false;
}
五、合併有序單鏈表
問題描述:合併2個有序單鏈表,合併後的鍊錶也是排好序的。
演算法描述:對鍊錶a中的每乙個節點元素,查詢其在鍊錶b中的插入位置,並在b中插入該元素。
**如下:
合併有序單鏈表
/*合併有序單鏈表*/
node * mergelist(node * h1,node * h2)
return h1;
}
鍊錶的常見操作
include include includeusing namespace std typedef struct nodetype node typedef struct dnodetype dnode 建立單鏈表 node createlist node head node current he...
鍊錶的常見操作
鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。以下簡單實現了鍊錶的一些操作,包括建立 增加節點 刪除節點 單鏈表逆置 合併有序鍊錶等。一 鍊錶建立 鍊錶主要有三種形式,包括單鏈表 雙鏈表和迴圈鍊錶。單鏈表每個節點只包含乙個後驅指標,雙鏈表節點同時包含乙個前驅指標和乙個...
鍊錶的常見操作
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。以下簡單實現了鍊錶的一些操作,包括建立 增加節點 刪除節點 單鏈表逆置 合併有序鍊錶等。一 鍊錶建立 鍊錶主要有三種形式,包括單鏈表 雙鏈表和迴圈鍊錶。單鏈表每個節點只包...