1. 单链表任意位置删除
//指定位置删除
LINKLIST deletePos(int pos,LINKLIST head){
if(pos <1 || pos > getLen(head) || NULL == head){
return head;
}
//只有一个节点
if(head->next == NULL){
head = deleteHead(head);
}else{
//找到pos-1的位置
LINKLIST p = head;
for(int i=1;i<pos-1;i++){
p=p->next;
}
//保存位置,删除 p->next
LINKLIST q = p->next;
p->next = q->next;
free(q);
q =NULL;
}
return head;
}
2. 单链表任意位置修改
//任意位置修改
LINKLIST updatePos(int pos,date_type element,LINKLIST head){
if(NULL == head || pos <1 || pos > getLen(head)){
return head;
}
LINKLIST p = head;
for(int i=1;i<pos;i++){
p = p->next;
}
p->date=element;
return head;
}
3. 单链表任意位置查找
//任意位置查找(返回第几个)
LINKLIST findPos(int pos,LINKLIST head,LINKLIST result){
if(pos <1 || pos > getLen(head) || NULL == head){
//查找不到返回 -1
return NULL;
}
LINKLIST p = head;
for(int i=1;i<pos;i++){
p =p->next;
}
//得到位置节点
result = p;
return result;
}
4. 单链表任意元素查找
//任意元素查找(返回下表)存在返回下表,不存在返回-1
int findByElement(date_type element,LINKLIST head){
if(NULL == head){
return ERROR;
}
LINKLIST p = head;
int count = 0;
while(p){
//while(p!=null)
count ++;
if(element == p->date){
return count;
}
//移动下表
p=p->next;
}
return ERROR;
}
5. 单链表任意元素修改
//任意元素修改
LINKLIST updateByElement(date_type key,date_type element,LINKLIST head){
//先查找元素是否存在
int index = findByElement(key,head);
if(ERROR == index){
return head;
}
LINKLIST p = head;
for(int i=1;i<index;i++){
p=p->next;
}
p->date = element;
return head;
}
6. 单链表任意元素删除
//任意元素删除
LINKLIST deleteByElement(date_type element,LINKLIST head){
//先查找元素是否存在
int index = findByElement(element,head);
if(ERROR == index){
puts("key not exist");
return head;
}
//调用指定位置删除
head = deletePos(index,head);
return head;
}
7. 单链表逆置
//单链表逆置
LINKLIST reverse(LINKLIST head){
//为空或者只有一个不需要逆置
if(NULL == head || NULL == head->next){
return head;
}
//找到头,找到头的下一个,头的下一个指向头,后移位置重复处理
LINKLIST p = head->next;
head->next = NULL;
while(p!=NULL){
LINKLIST t = p;
//指针后移
p=p->next;
t->next =head;
head = t;
}
return head;
}
思维导图: