線性結構 鏈表面試題

2021-08-20 19:22:52 字數 1350 閱讀 2993

一、從尾到頭列印單鏈表

法一:遞迴法

void slistnoderecurreverseprint(slistnode *phead)

法二:常規法

void slistnodetwoprint(slistnode *phead)

pend = pcur;//使pend前進一位

printf("%d <- ", pend->data);

} printf("\n");

}

二、逆置/反轉單鏈表(返回乙個新的單鏈表)

法一:頭刪頭插法

slistnode *slistnodeinverse1(slistnode **pphead) 

slistnode *pnewlist = null; // 新鍊錶

slistnode *p = *pphead; // 老鍊錶

slistnode *q = null; // 準備頭插的

while (p)

return pnewlist;

}

法二:p1,p2,p3改變頭結點

void slistnodeinverse2(slistnode **pphead)

*pphead = p1;

}

三、刪除乙個無頭單鏈表的非尾結點(不能遍歷單鏈表)

方法:替換刪除(不能刪除當前結點,那我們就刪除後面乙個節點,並修改當前結點內容)

void deletenode(slistnode *pos, datatype data)

四、在無頭單鏈表的乙個節點之前插入乙個結點(不能遍歷單鏈表)

void insertnode(slistnode *pos, datatype data)

五、單鏈表實現約瑟夫環

void slistnodejosephcircle(slistnode *phead,datatype k)

cur->pnext = phead;

//從頭開始迴圈

cur = phead;

while (cur->pnext != cur)

//利用替換刪除

slistnode *pre = cur->pnext;

cur->data = pre->data;

cur->pnext = pre->pnext;

free(pre);

}printf("%d \n", cur->data);

}

鏈表面試題

不改變鍊錶結構,從尾到頭列印單鏈表 遞迴實現 void printlistrevers recursively plist phead printf d phead data 當鍊表非常長的時候,遞迴實現的會導致函式呼叫層級很深,可能導致呼叫棧溢位。用棧不會出現此類情況,顯然用棧實現 的魯棒性會好一...

鏈表面試題

從尾到頭列印單鏈表 棧 遞迴 從尾到頭列印鍊錶 includevoid printtailtohead listnode head while s.empty 空間複雜度o n void printtailtoheadr listnode head cout data 刪除乙個無頭單鏈表的非尾結點 ...

鏈表面試題

typedef int datatype typedef struct node node,pnode,plist void initlist plist pplist void display const plist plist void pushback plist pplist,datatyp...