链表创建删除

203. 移除链表元素 - 力扣(LeetCode)

ListNode* removeElements(ListNode* head, int val) {

        ListNode* dummyHead = new ListNode(0);

    dummyHead->next = head;

    if (head==NULL) {

        return head;

    }

    ListNode* curNode=dummyHead;

    while(curNode->next!=NULL){//外包裹循环

        if(curNode->next->val==val){

            curNode->next=curNode->next->next;

        }else{

            curNode = curNode->next;

        }

    }

    return dummyHead->next;

    }

707. 设计链表 - 力扣(LeetCode)

//单指针+不带头结点
//定义结点
struct Node {
    //结点有两个属性,val和next指针
    int val;
    Node* next;
    Node(int _val): val(_val), next(nullptr) {};//构造体
};


class MyLinkedList {
private:
    int size; //链表长度
    Node* head; //链表头结点
public:
    MyLinkedList() {
        size = 0;
        head = nullptr;
    }

    int get(int index) {
        if(index >= size) return -1; //下标无效
        Node* cur = head;
        for(int i = 0; i < index; i++){
            cur = cur->next;
        }
        return cur->val;
    }

    void addAtHead(int val) {
        addAtIndex(0,val);
    }

    void addAtTail(int val) {
        addAtIndex(size,val);
    }

    void addAtIndex(int index, int val) {
        if(index > size || index < 0) return; //下标无效
        size++;
        Node* cur=head;
        for (int i = 0; i < index-1; ++i) {
            cur = cur->next;
        }
        Node* add=new Node(val);
        if(index == 0){
            add->next=cur;
            head=add;
        }else{
            add->next =cur->next;
            cur->next = add;
        }
    }

    void deleteAtIndex(int index) {
        if(index < 0 || index >= size){
            size--;
            Node* cur = head;
            for (int i = 0; i < index-1; ++i) {
                cur = cur->next;
            }

            if(index ==0){
                head =head->next;
            }else{
                Node* p=cur->next;
                cur->next =p->next;
                delete(p);
            }
        }
    }
};

206. 反转链表 - 力扣(LeetCode)

    ListNode* reverseList(ListNode* head) {

            //迭代

    ListNode* prev = NULL;

    ListNode* curr = head;

    while (curr != NULL) {

        ListNode* next = curr->next;

        curr->next = prev;

        prev = curr;

        curr = next;

    }

    return prev;

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值