單鏈表操作 單鏈表反轉問題?

2021-07-04 23:52:46 字數 2262 閱讀 1044

單鏈表:

typedef struct nodelnode;

關於但鍊錶的操作很多(增刪改查,逆序,子交並補等,以及一些經典的變式),考研題目中,有很多好的演算法值得學習。

下面是c語言實現的, 採用乙個method,乙個test_method,方便逐個學習,這個需要不斷的積累,最好用敲幾遍,再在紙上多寫寫,只有能自己完全的寫出來,才是完全的掌握。

#include 

#include

typedef

struct nodelnode;

lnode* newnode(int data)

return tmp ;

}// 頭插法

lnode* insert1(int a,int len)

return head;

}// 尾插法

lnode* insert2(int a,int len)

return head;

}void printlink(lnode* head)

lnode* t = head->next;

while(t != null)

printf("\n");

}void test_insert1()

; int len = 5;

lnode* head = insert1(a,len);

printlink(head);

}void test_insert2()

; int len = 5;

lnode* head = insert2(a,len);

printlink(head);

}// 直接插入排序

void sortlink(lnode* head)

}lnode* tmp = r ;// pre 和 scan 之間插入 tmp 這個節點

r = r->next; // r 取下乙個

tmp->next = scan;

pre->next = tmp ;

}}void test_sortlink()

; int len = 5;

lnode* head = insert2(a,len);

printlink(head);

sortlink(head);

printlink(head);

}// 反轉鍊錶,也就是採用頭插法

void reverselink(lnode* head)

}void test_reverselink()

; int len = 5;

lnode* head = insert2(a,len);

printlink(head);

reverselink(head);

printlink(head);

}// 刪除指定元素 利用pre p 找到乙個刪除乙個 , 查詢 插入等都差不多做法

void dellink(lnode* head,int deldata)

else

}}void test_dellink()

; int len = 5;

lnode* head = insert2(a,len);

printf("原始序列:");

printlink(head);

dellink(head,2);

printf("刪除 data = 2的節點後:");

printlink(head);}/*

找到倒數第k個元素(k取1到len(len為link長度)) 如果可以 實現需要判斷下 取模等操作處理(重要)

比如 1 3 2 7 5 倒數第2個為7 倒數第4個為3

*/lnode* searchlastk(lnode* head , int k)

// p q 一起移動, q移動到鍊錶尾部 , 則 p 就是倒數第k個節點

while(q != null)

return p;

}void test_searchlastk()

; int len = 5;

lnode* head = insert2(a,len);

printf("原始序列:");

printlink(head);

int k = 2 ;

lnode* ln = searchlastk(head , k);

printf("倒數第%d個:%d\n",k,ln->data);

}int main()

無頭結點的鍊錶反轉

單鏈表反轉問題

如何將單鏈表反轉?description definition for singly linked list.author crane yuan date 2016 9 17 下午12 11 13 public class listnode description 單鏈表反轉.param head ...

單鏈表反轉問題

今天聊乙個關於單鏈表反轉的問題,已知乙個單鏈表,給出頭結點,現要求定義乙個函式,輸入頭結點然後輸出反轉後的鍊錶。鍊錶反轉前 1 2 3 4 5 6 7 8 9 鍊錶反轉後 1 2 3 4 5 6 7 8 9首先我一看到這個問題,想到的是利用乙個陣列,將單鏈表按順序遍歷並把每個節點的值依次存放到陣列中...

單鏈表反轉

單鏈表反轉,可以用迴圈做,當然也可以遞迴 詳見 include includestruct node 3 1 4 6 2 1 1 3 4 6 2 2 4 1 3 6 2 3 6 4 1 3 2 4 2 6 4 1 3 5 迴圈反轉,即依次改動3個指標值,直到鍊錶反轉完成 比如,上面第 1 行到第 2...