翻转链表
2017-08-23 18:45
176 查看
翻转链表的两种情况
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
记录要翻转部分链表的pre和start节点,然后用一个指针在要翻转的链表里遍历。
翻转单链表
很简单public ListNode reverseList(ListNode head) { ListNode tmp=null; ListNode dummy=new ListNode(0); dummy.next=null; while(head!=null){ tmp=head.next; head.next=dummy.next; dummy.next=head; head=tmp; } return dummy.next; }
部分翻转链表
从部分位置翻转一个链表Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
记录要翻转部分链表的pre和start节点,然后用一个指针在要翻转的链表里遍历。
public ListNode reverseBetween(ListNode head, int m, int n) { if(head==null) return null; ListNode dummy=new ListNode(0); dummy.next=head; ListNode pre=dummy; for(int i=0;i<m-1;i++){ pre=pre.next; } ListNode start=pre.next; ListNode after=start.next; for(int i=0;i<n-m;i++){ start.next=after.next; after.next=pre.next; pre.next=after; after=start.next; } return dummy.next; }
两两翻转链表
给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。public ListNode swapPairs(ListNode head) { ListNode dummy=new ListNode(0); dummy.next=head; ListNode pre=dummy; while(pre.next!=null && pre.next.next!=null){ ListNode first=pre.next; ListNode second=pre.next.next; first.next=second.next; second.next=first; pre.next=second; pre=pre.next.next; } return dummy.next; }
相关文章推荐
- 链表--链表K个翻转
- 链表的相邻元素的翻转
- 无情链表的创建,,翻转翻转
- 链表的翻转
- 面试题—链表的‘部分’翻转
- 翻转单链表
- 9月10日,美团网2014校招研发笔试哈尔滨站 1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现
- 链表的翻转
- 翻转链表
- 翻转链表-LintCode
- 翻转单链表中的K个节点——By Java
- 翻转链表 - C++
- c数据结构——链表添加+删除+翻转
- 题目:翻转链表
- C++循环链表中进行元素的翻转
- 翻转链表
- 35 - 翻转链表
- Reversing Linked List--链表翻转
- 翻转链表
- 链表相邻元素翻转