203.移除链表元素、707.设计链表、206.反转链表、

134 阅读3分钟

203.移除链表元素* 707.设计链表*206.反转链表

203.移除链表元素

题目地址 : leetcode.cn/problems/re…

代码 :

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
​
        ListNode* p;
        ListNode* pre;
​
        ListNode* LinkedList_Return;
​
        p = head ;
​
        LinkedList_Return = nullptr;
​
​
        pre = p;
​
        while( p != nullptr )
        {
            
​
            if(p->val == val)
            {
                pre->next = p->next;
​
                pre = pre ;
​
            }
            else if(LinkedList_Return == nullptr)
            {
                LinkedList_Return = p;
​
                pre = p;            //  要  区分  情况    
            }
            else        //  注意  情况  分类
            {
                pre = p;
​
            }
​
            
​
            p = p->next;
        }
​
​
​
        return LinkedList_Return ;
​
​
    }
};

707.设计链表

题目地址 : leetcode.cn/problems/de…

代码 :

class MyLinkedList {
public:
​
    struct LinkedList
    {
        int val;
        LinkedList * next;
​
    };
​
    LinkedList * head = nullptr ;
​
    int length_LinkedList;
​
​
    MyLinkedList() {
        length_LinkedList = 0;
​
    }
    
    int get(int index) {
        LinkedList * p ;
​
        p = head ;
​
        int count_Index = 0;
​
​
        if(index < 0 || index >= length_LinkedList)
        {
            return -1 ;
​
        }
​
        while( p != nullptr && count_Index < index )
        {
​
            
            
            p = p->next;
​
            count_Index++;
​
        }
​
​
        if(count_Index < index )
        {
            return -1;
​
        }
​
        return p->val ;
​
​
    }
    
    void addAtHead(int val) {
​
        if(head == nullptr)
        {
            LinkedList * temp = (LinkedList *) malloc (sizeof (LinkedList));
​
            temp->val = val;
            temp->next = nullptr;
​
            head = temp;
​
        }
        else
        {
            LinkedList * p = head;
​
            LinkedList * temp = (LinkedList *) malloc (sizeof (LinkedList));
​
            temp->val = val;
            temp->next = head;
​
            head = temp;
​
​
        }
​
        length_LinkedList++ ;
​
    }
    
    void addAtTail(int val) {
​
​
        if(head == nullptr)
        {
            LinkedList * temp = (LinkedList *) malloc (sizeof (LinkedList));
​
            temp->val = val;
            temp->next = nullptr;
​
            head = temp;
​
        }
        else
        {
            LinkedList * p = head;
​
            LinkedList * temp = (LinkedList *) malloc (sizeof (LinkedList));
​
            temp->val = val;
            temp->next = nullptr;
​
​
            while(p->next != nullptr )
            {
​
                p = p->next ;
​
            }
​
            p->next = temp ;
​
​
        }
​
        length_LinkedList++ ;
​
    }
    
    void addAtIndex(int index, int val) {
​
        int count_Index;
​
​
        LinkedList * p = head ;
​
        LinkedList * pre = nullptr ;
​
​
​
        count_Index = 0;
​
        //cout << "length_LinkedList : "<<length_LinkedList<<endl;
​
        if(index < 0 || index > length_LinkedList)
        {
            return ;
​
​
        }
​
        if( index == 0 )
        {
            addAtHead(val);
​
            return ;
​
        }
        else if( (index ) == length_LinkedList)
        {
            addAtTail(val);
​
            return ;
​
​
        }
​
​
        while( p != nullptr && count_Index < index )
        {
​
            pre = p;
​
            p = p->next ;
​
            count_Index++;
​
        }
​
        if(count_Index < index )
        {
            cout<<" 输入 的 index 超出 了  链表 长度  " << endl ;   // 在 其它 函数 部分  正常  工作   时        
​
        }
​
​
        LinkedList * temp = (LinkedList *) malloc (sizeof (LinkedList));
​
        temp->val = val;
        temp->next = p ;
​
​
        pre->next = temp;
​
        length_LinkedList++ ;
​
​
​
​
    }
    
    void deleteAtIndex(int index) {
        
        int count_Index;
​
        LinkedList * p = head ;
​
        LinkedList * pre = nullptr ;
​
​
        count_Index = 0;
​
        if(index < 0 || index >= length_LinkedList)
        {
            return ;
​
        }
​
​
        if( index == 0 )
        {
            head = p->next ;
​
            length_LinkedList-- ;
​
            return ;
​
        }
        else if( (index + 1 ) == length_LinkedList )
        {
            
            while(p->next != nullptr )
            {
                pre = p;
                p = p->next;
​
            }
​
            pre->next = nullptr;
​
            length_LinkedList-- ;
​
            return ;
​
​
        }
​
        //cout<< "p->val : " << p->val << endl;
​
        while( p != nullptr && count_Index < index )
        {
​
            pre = p ;
​
            //cout<< "p->val : " << p->val << endl;
​
            p = p->next ;
​
            count_Index++;
​
            //cout<<"line"<<endl;
​
        }
​
        //cout<< "p->val : " << p->val << endl;
​
        //if(pre == nullptr)
        //{
        //    cout<< 1 << endl;
        //}
​
        //if(p == nullptr)
        //{
        //    cout<< 2 << endl;
        //}
​
        pre->next = p->next ;
​
​
        length_LinkedList-- ;
​
​
​
​
​
​
​
    }
};
​
/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList* obj = new MyLinkedList();
 * int param_1 = obj->get(index);
 * obj->addAtHead(val);
 * obj->addAtTail(val);
 * obj->addAtIndex(index,val);
 * obj->deleteAtIndex(index);
 */

206.反转链表

题目地址 : leetcode.cn/problems/re…

代码 : (”头插法“)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* p1;
        ListNode* p2 = nullptr;
        ListNode* ptr_NewLinkedListHead = nullptr;
​
        ListNode* next = nullptr;
​
        ListNode* Node_Temp = nullptr;
        
​
        p1 = head;
​
        while( p1 != nullptr )
        {
​
            next = p1 -> next ;
​
            if(p2 == nullptr )
            {
                Node_Temp = p1;
​
                //  末尾  指针  的  清理    
​
                Node_Temp -> next = nullptr ;
​
​
                p2 = Node_Temp ;
​
                ptr_NewLinkedListHead = p2;
​
​
​
            }
            else
            {
                Node_Temp = p1;
​
​
                Node_Temp -> next = ptr_NewLinkedListHead;
​
​
                ptr_NewLinkedListHead = Node_Temp;
​
​
​
            }
​
​
            p1 = next;
​
        }
​
        return ptr_NewLinkedListHead ;
​
​
    }
};

代码 : (“使用 Stack 的 支持” )

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
​
        // 使用  栈   的   support     ?
​
​
        ListNode* p1 = head;
​
        ListNode* p2 = nullptr ;
​
​
        ListNode* ptr_NewLinkedListHead = nullptr;
​
​
        stack<int> stack_Temp;
​
​
​
        while(p1 != nullptr )
        {
​
            stack_Temp.push(p1->val);
​
            //cout<< 1 << endl;
            //cout<< stack_Temp.top() << endl;
​
​
            p1 = p1->next ;
​
        }
​
​
​
        //while( stack_Temp.size() != 0)
        while( stack_Temp.empty() == 0)
        {
            //cout<< stack_Temp.top() << endl;
​
            int num_Temp = stack_Temp.top();
​
            stack_Temp.pop();
​
            //ListNode* Node_Temp = (ListNode*)malloc(sizeof(ListNode));
​
            ListNode* Node_Temp = new ListNode(num_Temp);
​
            Node_Temp->val = num_Temp ;
​
            Node_Temp->next = nullptr ;
​
            //  分  情况                
​
​
            if(p2 == nullptr)
            {
                p2 = Node_Temp;
​
                ptr_NewLinkedListHead = p2 ;
            }
            else
            {
                p2->next = Node_Temp;
​
                p2 = p2->next ;
​
            }
​
            
​
​
        }
​
        //cout<< 1111 << endl;
​
        //ListNode* p3 = ptr_NewLinkedListHead;
​
        //while(p3 != nullptr )
        //{
            //cout<<p3->val<<endl;
​
            //p3 = p3->next;
        //}
​
        return ptr_NewLinkedListHead ;
​
​
​
​
​
​
​
​
    }
};