删除链表中等于给定值val的所有节点
反转一个单链表
返回链表的中间结点
输入一个链表,输出该链表中倒数第k个结点
合成两个链表
返回链表开始入环的第一个节点
1、删除链表中等于给定值val的所有节点
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
思路:1,先判断链表是否为空,如果为空就返回空。2,从链表的第二个节点开始判断是否要删除。(循环)3,在判断链表的第一个节点是不是我们要删除的那个节点,如果是则要删除它。4,返回链表
struct ListNode* removeElements(struct ListNode* head, int val) {
if(head==NULL){
return NULL;
}
struct ListNode *cur=head;
struct ListNode *node=head->next;
while(node!=NULL){
//考虑从第二个节点开始删除
if(node->val==val){
cur->next=node->next;
free(node);
node=cur->next;
}
else{
cur=node;
node=node->next;
}
}
//考虑第一节点就是我们要删除的结点
if(head->val==val){
struct ListNode *old_head=head;
head=head->next;
free(old_head);
}
return head;
}
方法二、递归解决
ListNode* removeElements(ListNode* head, int val) {
if(head==NULL)
{
return head;
}
head->next=removeElements(head->next,val);
return head->val==val?head->next:head;
}
2、反转一个单链表
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL