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