鍊錶的常見操作

2021-06-08 18:21:11 字數 2060 閱讀 4751

鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。

以下簡單實現了鍊錶的一些操作,包括建立、增加節點、刪除節點、單鏈表逆置、合併有序鍊錶等。

一、鍊錶建立

鍊錶主要有三種形式,包括單鏈表、雙鏈表和迴圈鍊錶。

單鏈表每個節點只包含乙個後驅指標,雙鏈表節點同時包含乙個前驅指標和乙個後驅指標,迴圈鍊錶的尾節點的後驅指向頭節點。

**如下:

/*單鏈表節點結構*

/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...

鍊錶的常見操作

鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。以下簡單實現了鍊錶的一些操作,包括建立 增加節點 刪除節點 單鏈表逆置 合併有序鍊錶等。一 鍊錶建立 鍊錶主要有三種形式,包括單鏈表 雙鏈表和迴圈鍊錶。單鏈表每個節點只包含乙個後驅指標,雙鏈表節點同時包含乙個前驅指標和乙個...

鍊錶的常見操作

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!鍊錶是資料結構的重要內容,在電腦程式中應用廣泛,同時也是各公司筆試題目的重點。以下簡單實現了鍊錶的一些操作,包括建立 增加節點 刪除節點 單鏈表逆置 合併有序鍊錶等。一 鍊錶建立 鍊錶主要有三種形式,包括單鏈表 雙鏈表和迴圈鍊錶。單鏈表每個節點只包...