LC-707 单链表的增删改查操作:
typedef struct {
int val;
struct MyLinkedList* next;
} MyLinkedList;
//创建头节点
MyLinkedList* myLinkedListCreate() {
MyLinkedList* head =(MyLinkedList *)malloc(sizeof(MyLinkedList));
head->next=NULL;
return head;
}
//获取链表第index个节点的数值,如果索引无效,则返回-1
int myLinkedListGet(MyLinkedList* obj, int index) {
MyLinkedList *p=obj->next;
for(int i=0;p!=NULL;i++){
if(i==index)
return p->val;
else
p=p->next;
}
return -1;
}
//在链表的最前面插入一个节点
void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
MyLinkedList *p=(MyLinkedList *)malloc(sizeof(MyLinkedList));
p->val=val;
p->next=obj->next;
obj->next=p;
}
//在链表的最后面插入一个节点
void myLinkedListAddAtTail(MyLinkedList* obj, int val) {
MyLinkedList *h=obj;
while(h->next!=NULL)
{
h=h->next;
}
MyLinkedList *p=(MyLinkedList *)malloc(sizeof(MyLinkedList));
p->val=val;
p->next=NULL;
h->next=p;
}
//在链表第index个节点前面插入一个节点。如果index 等于链表的长度,则加到链表末尾;index 大于链表长度,则插入;index小于0,则在头部插入。
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {
if(index<=0){
myLinkedListAddAtHead(obj,val);
return;
}
MyLinkedList *p=(MyLinkedList *)malloc(sizeof(MyLinkedList));
MyLinkedList *h=obj->next;
for(int i=1;h!=NULL;i++){
if(i==index){
p->val=val;
p->next=h->next;
h->next=p;
return;
}
else
h=h->next;
}
}
//如果索引 index 有效,则删除链表中的第 index 个节点。
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {
if(index==0){
MyLinkedList *p=obj->next;
if(p!=NULL)
{
obj->next=p->next;
free(p);
}
return;
}
MyLinkedList *q=obj->next;
for(int i=1;q!=NULL&&q->next!=NULL;i++){
if(i==index){
MyLinkedList *t=q->next;
if(t!=NULL){
q->next=t->next;
free(t);
}
return;
}
else
q=q->next;
}
}
//删除链表所有元素
void myLinkedListFree(MyLinkedList* obj) {
while(obj!=NULL){
MyLinkedList *p=obj;
obj=obj->next;
free(p);
}
}