您的位置:首页 > 其它

关于遇到过链表问题的一些总结

2017-10-05 12:20 295 查看
在这里我总结了一些在leetcode和平时遇到的一些链表问题,其中有一些问题非常经典,话不多说直接开始吧.

1.Revere Linked List(leetcode上206题)

题目非常的简单,让你反转一个单向链表.比如说原来的链表是1->2->3->4->5->null翻转后的链表就应该是

null-<1-<2-<3-<4-<5,但是有人可能认为翻转后是5->4->3->2->1->null,但是这题我们要求保证原来的顺序不能变.

好了,弄清楚题目的要求,我们来分析下吧



如图所示链表头指针是current,我把它的next结点称为next指针



那么开始反转吧,在反转之前防止丢失下一个结点的信息,先保存下一个结点,next = current.next,再把curren指向null,但是我们会发现结点1和2之间失去了联系,由此聪明的小伙伴想到还需要一个指针来保存与前一个结点联系



我把前一个结点称为pre,现在就不用担心结点之间关系丢失,按照之前的思路,完成一次反转之后,只需要把pre ,current,next都向后移动一位就行了.



我们分析完之后就开始coding吧

public class ReverseLinkedList {
private  class ListNode{
int val;
ListNode next;
public ListNode(int val){this.val = val;}
}

//输入一个链表,反转链表后,输出链表的所有元素。
public ListNode ReverseList(ListNode head) {
ListNode current = head;
ListNode pre = null;
ListNode next ;
while (current != null) {
next = current.next;//先保存当前结点的下一个结点信息
current.next = pre;//把当前结点指向前一个结点
pre = current;//更新pre指针位置
current = next;//更新current指针位置
}
return pre;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 leetcode