【数据结构篇】链表
设计链表
- 在链表类中实现这些功能:
·get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
·addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
·addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
·addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
·deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
- 代码示例如下
typedef struct MyLinkedList_t
{
int val;
struct MyLinkedList_t *next;
} MyLinkedList;
/** Initialize your data structure here. */
MyLinkedList *myLinkedListCreate()
{
MyLinkedList *obj = (MyLinkedList *)malloc(sizeof(MyLinkedList));
obj->val = 0;
obj->next = NULL;
return obj;
}
/** Get the value of the index-th node in the linked list. If the index is invalid, return -1. */
int myLinkedListGet(MyLinkedList *obj, int index)
{
if (index < 0 || obj->next == NULL)
{
return -1;
}
int now = 0;
MyLinkedList *listNow = obj->next;
while (now < index)
{
if (listNow == NULL)
{
return -1;
}
listNow = listNow->next;
now++;
}
if (listNow != NULL)
{
return listNow->val;
}
return -1;
}
/** Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list. */
void myLinkedListAddAtHead(MyLinkedList *obj, int val)
{
MyLinkedList *Node = (MyLinkedList *)malloc(sizeof(MyLinkedList));
Node->val = val;
Node->next = NULL;
if (obj->next == NULL)
{
obj->next = Node;
return;
}
else
{
Node->next = obj->next;
obj->next