鍊錶的反轉

2021-06-14 10:14:20 字數 1630 閱讀 8734

(1

)鍊錶的反轉

原先的鍊錶保留乙個頭結點head

,通過該頭結點可以遍歷鍊錶的每乙個結點裡內容,如果在鍊錶遍歷的過程中,再用兩個指標把把煉表裡的內容指標的指向改變,使原先指向下乙個節點的,改為指向它的前乙個節點,就可以實現鍊錶的反轉了!

#include

#include

struct llist

int num;

struct llist *next;      

typedef struct llist node ;

typedef node *llink;

void printllist(llink ptr)

while(ptr!=null)

printf("[%d]",ptr->num);

ptr=ptr->next;               

printf("\n");   

llink createllist(int *array,int len)

llink head;     

llink  ptr,ptr1;

int i;

head=(llink)malloc(sizeof(node));

if(!head)

return null;

head->num=array[0];

head->next=null;

ptr=head;

for(i=1;iptr1=(llink)malloc(sizeof(node));

if(!ptr1)

return null;                

ptr1->num=array[i];

ptr->next=null;

ptr->next=ptr1;

ptr=ptr->next;      

return head;  

//鍊錶反轉的實現過程

llink invertllist(llink head)

llink mid,last;      

mid=null;

while(head!=null)

last=mid;                

mid=head;

head=head->next;

mid->next=last;               

return mid;

void freellist(llink head)

llink ptr;

while(head!=null)

ptr=head;                

head=head->next;

free(ptr);               

int main()

int llist[6]=;

llink head;

head=createllist(llist ,6);

if(!head)

exit(1);         

printllist(head);

head=invertllist(head);

printllist(head);

printllist(head);

return 0;    

鍊錶 反轉鍊錶

問題 兩兩交換鍊錶中的節點 問題 k 個一組翻轉鍊錶 問題鏈結 利用棧先進後出的特性,遍歷鍊錶,將每個結點加入棧中,最後進行出棧操作,先出棧的結點指向臨近的後出棧的結點。definition for singly linked list.struct listnode class solution ...

反轉鍊錶與分組反轉鍊錶

經典的反轉鍊錶,先上 public class listnode public class printlist system.out.println public class reverse public listnode reverse listnode root listnode pre nul...

鍊錶的反轉

鍊錶的反轉是乙個經常被問到的乙個面試題,也是乙個非常基礎的問題。比如乙個鍊錶是這樣的 1 2 3 4 5 通過反轉後成為5 4 3 2 1。最容易想到的方法遍歷一遍鍊錶,利用乙個輔助指標,儲存遍歷過程中當前指標指向的下乙個元素,然後將當前節點元素的指標反轉後,利用已經儲存的指標往後面繼續遍歷。源 如...