反转链表
思路:两个指针,循环遍历链表,并将后者的next指向前者
class ListNode
{
int val;//存储元素
ListNode next;
public ListNode(int val)
{
this.val=val;
next=null;
}
public static ListNode Create(int[] val)
{
ListNode head=new ListNode(val[0]);
ListNode T=head;
for(int i=1;i<val.length;i++)
{
T.next=new ListNode(val[i]);
T=T.next;
}
return head;
}
}
public class Solution {
public static int count=0;
public ListNode reverseList(ListNode head) {
ListNode temp1=head.next;
ListNode temp2=temp1.next;
head.next=null;
while(temp2!=null)
{
temp1.next=head;
head=temp1;
temp1=temp2;
temp2=temp2.next;
}
temp1.next=head;
return temp1;
}
public static void main(String[] args)
{
int[] val= {1,2,3,4,5};
ListNode head=ListNode.Create(val);
Solution ss=new Solution();
ListNode L=ss.reverseList(head);
System.out.println(L.next.next.val);
}
}
合并两个排序的链表
**
数据结构的基本知识
class ListNode
{
int val;//存储元素
ListNode next;
public ListNode(int val)
{
this.val=val;
next=null;
}
public static ListNode Create(int[] val)
{
ListNode head=new ListNode(val[0]);
ListNode T=head;
for(int i=1;i<val.length;i++)
{
T.next=new ListNode(val[i]);
T=T.next;
}
return head;
}
public static void Visit(ListNode L)
{
while(L!=null)
{
System.out.print(L.val+"->");
L=L.next;
}
}
}
public class Solution {
public static int count=0;
public ListNode mergeTwoLists(ListNode l1, ListNode l2)
{
ListNode t1=l1;
ListNode t11=t1.next;
ListNode t2=l2;
ListNode t22=l2.next;
while(t11!=null&&t22!=null)
{
if(t1.val<=t2.val)
{
while(t11!=null&&t1.next.val<=t2.val)//一直往l1走,直到该节点的下一节点大于t2
{
t1=t11;
t11=t11.next;
}
t1.next=t2;
t1=t11;
if(t11!=null)
t11=t11.next;
}
else
{
while(t22!=null&&t2.next.val<=t1.val)
{
t2=t22;
t22=t22.next;
}
t2.next=t1;
t2=t22;
if(t22!=null)
t22=t22.next;
}
}
if(l1.val<=l2.val)
return l1;
else
return l2;
}
public static void main(String[] args)
{
int[] val1= {1,2,4};
ListNode l1=ListNode.Create(val1);
int[] val2= {1,3,4};
ListNode l2=ListNode.Create(val2);
Solution ss=new Solution();
ListNode L=ss.mergeTwoLists(l1, l2);
ListNode.Visit(L);
}
}