合并链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
  class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {

   ListNode MergeNode=null;
          ListNode node=null;
           if(list1==null){
               return list2;
             }
           if(list2==null){
                 return list1;
           }
           while(list1!=null&&list2!=null){
               if(list1.val<=list2.val){
                   if(MergeNode==null){
                   MergeNode=node=list1;
                   }else{
                    node.next=list1;
                    node=node.next;

                   }
                   list1=list1.next;
               }else{
                   if(MergeNode==null){
                   MergeNode=node=list2;
                   }else{
                   node.next=list2;
                    node=node.next;

                   }
                    list2=list2.next;
               }

           }
           if(list1==null){
               node.next=list2;
           }else{
              node.next=list1;
           }
           return MergeNode;

    }
}

通过这个题真的是受益匪浅,前面遇到过的很多问题也是得到了解决。当对一个链表进行操作的时候,应该用他的替代者进行操作,不然他会不断地覆盖下一个。比如

我想实现一个链表node1,向其里面不断地添加元素
ListNode node1=new  ListNode(5);
        ListNode node2=null;
        for(int i=0;i<5;i++){
            node1.next=new ListNode(i);
            node1=node1.next;
        }
        while(node1!=null){
            System.out.println(node1.val);
            node1=node1.next;
        }

如果我这么做,最后链表里面只会剩下一个4,因为他会不断指向新的节点,而不是把他链接起来。而如果

        ListNode node1=new  ListNode(5);
        ListNode node2=null;
        node2=node1;
        for(int i=0;i<5;i++){
            node2.next=new ListNode(i);
            node2=node2.next;
        }
        while(node1!=null){
            System.out.println(node1.val);
            node1=node1.next;
        }

用一个node2代表node1去做这件事。node1就保存了5 0 1 2 34 五个节点。

首先

node2相当于一个指针移动。

时间: 2024-10-21 02:28:19

合并链表的相关文章

一种合并链表方法实现 严蔚敏 数据结构

参考别人的,合并代码经过修改,个人觉得这种比较容易理解 #include<iostream>using namespace std;typedef int ElemType; //两个递增的链表合并成递增的链表.typedef struct LNode{ ElemType data; struct LNode *next;}LNode;typedef LNode *LinkList;void CreatList(LinkList &L,int n){ LinkList p,q; L=n

leetCode 21. Merge Two Sorted Lists 合并链表

21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 题目大意:合并两个有序的链表 思路:通过比较两个链表的节点大小,采用尾插法建立链表. 代码如下: /**  * Definition for singly-lin

merge-two-sorted-lists合并链表

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 合并两个有序链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNod

c# 有序链表合并 链表反转

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinkedListTest { class Program { static void Main(string[] args) { LinkList<int> linkA = new LinkList<int>(); linkA.A

剑指offer --合并链表

题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解法://递归解法 public class MixLink { /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode Merge(ListNode list1,ListNo

链表有环判断,快慢指针两种方法/合并链表/删除重复元素/二分递归和while

public static boolean hasCycle(ListNode head) { if (head == null || head.next == null) { return false; } ListNode slow = head; ListNode fast = head.next; while (slow != fast) { if (slow.next == null) return false; slow = slow.next; if (fast.next == n

(链表)链表的一些合并问题

问题一:合并两个排序的链接列表,并将其作为新列表返回. 新列表应该通过将前两个列表的节点拼接在一起来进行. 思路:有两种方式:递归和非递归.我感觉递归的比较简单.给定两个链表,如果l1为空,返回l2,如果l2为空,返回l1. 如果l1节点大于l2,node等于l2当前节点,node->next=(递归调用函数处理)merge(l1,l2->next); 代码: /** * Definition for singly-linked list. * struct ListNode { * int

合并有序链表

using namespace std; struct ListNode { int         m_Data; ListNode*   m_pNext; ListNode(int value,ListNode* next = NULL):m_Data(value),m_pNext(next){} }; /* 两个链表  比如链表1: 1->3->5->7->9 链表2:  2->4->6->8->10 跟我们合并两个数组一样,链表1的头结点  和链表2

双链表&amp;链表合并&amp;多项式相加算法

//单链表的合并 //链表合并 //两个链表必须是有序的 #define Maxsize 5 typedef  int elemtype; typedef struct linklist { elemtype data; struct linklist *next; }Linklist; //建立链表1 Linklist *CreateList1 () { int i,data ; Linklist *head, *p, *q; head=p=(Linklist  *)malloc(sizeof