#include
#include
typedef char linktype;
typedef struct linklistlinklist;
void linklistinit(linklist **head)
*head =
null;
}void linklistprint(linklist *head)
linklist *cur = head;
while(cur !=
null)
printf("\n");
}linklist * creat(linktype value)
newnode->
data
= value;
newnode->next =
null;
return newnode;
}void linklist_pushback(linklist **head,linktype value)
if(*head ==
null)
linklist *
new= creat(value);
linklist *cur =
*head;
while(cur ->next !=
null)
cur->next =
new;
}linklist* linklist_nizhi1(linklist *head)
linklist *newhead = linklist_nizhi1(head->next);//將遞迴到最後乙個元素
//此時的head就是newhead的前乙個元素,將這個元素的下乙個的下乙個指向自己
head->next->next = head;
//也就是說將newhead的下乙個指向head,相當於翻轉鍊錶,從最後乙個開始鏈
head->next =
null;
//斷開鍊錶,防止成環
字串逆置(遞迴和非遞迴)
單鏈表逆置 遞迴 要時時刻刻記著,我們要返回的是當前鍊錶的尾結點,這樣的話if和else中的內容就很清楚了。逆置單鏈表,返回原單鏈表的尾結點。linklist reverserecursive linklist l return reversehead 單鏈表逆置 非遞迴 根據劍指offer上的講述...
單鏈表反轉(遞迴和非遞迴)
單鏈表反轉有遞迴和非遞迴兩種演算法。下面定義節點 cpp view plain copy typedef struct listnodelistnode 在遞迴演算法中的做法是 1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼 2反轉這兩個節點 3倒數第三個和第四個節點重複執行步驟...
單鏈表反轉(遞迴和非遞迴)
單鏈表反轉有遞迴和非遞迴兩種演算法。下面定義節點 typedef struct listnodelistnode 在遞迴演算法中的做法是 1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼 2反轉這兩個節點 3倒數第三個和第四個節點重複執行步驟2 其中注意,鍊錶是以節點後繼為null...