| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #include <stdlib.h>
- typedef struct ListNode
- {
- int val;
- ListNode *next;
- } ListNode;
- // 若使用了带头节点的链表,则无需判断head是否为空
- ListNode *createListNode(int val)
- {
- ListNode *node = (ListNode *)malloc(sizeof(ListNode));
- node->val = val;
- node->next = NULL;
- return node;
- }
- void printList(ListNode *head)
- {
- ListNode *temp = head;
- while(temp){
- printf("%d ",temp->val);
- temp = temp->next;
- }
- printf("\n");
- }
- // 添加节点
- ListNode *addNode(ListNode *head,int val)
- {
- if(head == NULL){
- head = createListNode(val);
- return head;
- }
- ListNode *temp = head;
- while(temp->next){
- temp = temp->next;
- }
- ListNode *node = (ListNode *)malloc(sizeof(ListNode));
- node->val = val;
- node->next = NULL;
- temp->next = node;
- return head;
- }
- int Locate(ListNode *head,int val){
- if(head == NULL){
- return -1;
- }
- ListNode *temp = head;
- int index = 0;
- while(temp){
- if(temp->val==val){
- return index;
- }
- temp = temp->next;
- index++;
- }
- return -1;
- }
- // 删除节点
- ListNode *deleteNode(ListNode *head,int val){
- if(head == NULL){
- return NULL;
- }
- ListNode *temp1 = head;
- if(temp1->val == val){
- head = temp1->next;
- free(temp1);
- return head;
- }
- ListNode *temp2 = head->next;
- while (temp2)
- {
- if(temp2->val == val){
- temp1->next = temp2->next;
- free(temp2);
- return head;
- }
- temp1 = temp1->next;
- temp2 = temp2->next;
- }
- return head;
- }
- ListNode *insertNode(ListNode *head,int val,int index){
- if(head == NULL){
- head = createListNode(val);
- return head;
- }
- ListNode *temp = head;
- int i = 0;
- while(i < index-1 && temp){
- temp = temp->next;
- i++;
- }
- ListNode *node = (ListNode *)malloc(sizeof(ListNode));
- node->val = val;
- node->next = temp->next;
- temp->next = node;
- return head;
- }
|