zoukankan      html  css  js  c++  java
  • day17(反转链表)

    题目描述

    输入一个链表,反转链表后,输出新链表的表头。
     
     
    提交链接:点击

    思路:利用3个指针,一个指向当前节点,一个指向前一个节点,一个指向后一个节点。那么就地反转,就是将当前节点的next指向pre,然后将当前节点设置为前一个节点,让当前节点指向后一个节点(这是为下一轮做准备)。

    代码:

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) : val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* ReverseList(ListNode* pHead) {
            //头插法实现
            ListNode *pre=NULL,*pnext=NULL;
            while(pHead!=NULL){
                pnext=pHead->next;  //pnext指向下一个节点
                pHead->next=pre;    //当前指针的next应该指向前一个节点
                pre=pHead;          //pre指向当前节点,为下一轮做准备
                pHead=pnext;         //pHead指向下一个节点,为下一轮做准备
            }
            return pre;
        }
        /*
            //递归
            if(pHead==NULL || pHead->next==NULL) return pHead;
            ListNode *Head=ReverseList(pHead->next);
            pHead->next->next=pHead;
            pHead->next=NULL;
            return Head;
       */
    }; 

    题目描述

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
     
     
    提交链接:点击
     
     
    思路:
     
     
    代码:
    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
        {
            ListNode *newHead=new ListNode(-1),*Head;//newHead表示头结点
            newHead->next=NULL;   //最开始头结点指针域为空
            Head=newHead;   //Head指向头结点
            for(;pHead1!=NULL&&pHead2!=NULL;){
                if(pHead1->val <= pHead2->val){  //pHead1链表上的指小一些,则newHead->next指向pHead1,newHead、pHead1随着后移
                    newHead->next=pHead1;
                    pHead1=pHead1->next;
                    newHead=newHead->next;
                }else{   //与上面正好相反
                    newHead->next=pHead2;
                    pHead2=pHead2->next;
                    newHead=newHead->next;
                }
            }
            if(pHead1!=NULL) newHead->next=pHead1;  //如果pHead1上还有元素,则链接在尾部
            if(pHead2!=NULL) newHead->next=pHead2;
            return Head->next;
        }
    };

    非学无以广才,非志无以成学! 【Magic_chao

  • 相关阅读:
    绿色版Notepad++ 加右键带图标菜单
    C#中string和StringBuilder的区别
    C#中string和String的区别
    C#中is和as的区别
    C#中抽象类(abstract)和接口(interface)的相同点与区别
    c++串口通信实例
    vs2017常用快捷键
    Qt编译opencv找不到头文件
    Qt常用快捷键
    二维数组和指针
  • 原文地址:https://www.cnblogs.com/logo-88/p/9708870.html
Copyright © 2011-2022 走看看