單鏈表:
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...