C語言解字符串逆序和單向鏈表逆序問題的代碼示例
字符串逆序
上次面試碰到一個單向鏈表逆序的題目,幸好對字符串逆序比較熟悉,類比做出來了。字符串逆序比較簡單,直接上代碼:
void stringReverse(char* p1,char* p2)
{
if(p1==p2)return;
//swap the value of p1 ,p2
*p1=(*p1)+(*p2);
*p2=(*p1)-(*p2);
*p1=(*p1)-(*p2);
if(p1==p2-1)return;
else stringReverse(++p1,--p2);
}
調(diào)用示例:
stringReverse(str,str+strlen(str)-1);
單向鏈表逆序
先上三幅圖:原始狀態(tài)是圖一,全部逆序之后是圖三的樣子,圖二是逆序一步之后的樣子。按照圖二的步驟依次往后,每次移動一步,把p1->next 反向,直到全部逆序。詳細(xì)原理請看代碼。
圖一:

圖二:

圖三:

typedef struct Node Node;
struct Node{
int data;
Node* next;
};
Node* reverseLinkList(Node* head){
if (head==NULL||head->next==NULL) {
return head;
}
Node* p1 = head;
Node* p2 = p1->next;
Node* p3 = p2->next;
p1->next = NULL;//p1要變成尾指針,所以指向NULL
while (p3!=NULL) {
p2->next = p1;//p2->next 反向
p1=p2;//p1指針向后移動一步
p2=p3;//p2指針向后移動一步
p3=p3->next;//p3指針向后移動一步
}
p2->next=p1;//p3指向了NULL,p2反向
head=p2;//頭指針指向之前的尾指針
return head;
}
至此結(jié)束了。
相關(guān)文章
vscode和cmake編譯多個C++文件的實(shí)現(xiàn)方法
這篇文章主要介紹了vscode和cmake編譯多個C++文件的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
C++實(shí)現(xiàn)LeetCode(205.同構(gòu)字符串)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(205.同構(gòu)字符串),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++實(shí)現(xiàn) vector 的四則運(yùn)算
本文給大家介紹的是在C++中實(shí)現(xiàn)高效的vector四則運(yùn)算的方法的相關(guān)資料,需要的朋友可以參考下2016-07-07
C語言不使用strcpy函數(shù)如何實(shí)現(xiàn)字符串復(fù)制功能
這篇文章主要給大家介紹了關(guān)于C語言不使用strcpy函數(shù)如何實(shí)現(xiàn)字符串復(fù)制功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

