一、從尾到頭列印單鏈表
法一:遞迴法
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...