單鏈表的逆置(遞迴和非遞迴)

2021-08-23 14:05:08 字數 1305 閱讀 4035

#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...