关闭

用三个节点反转一个链表

129人阅读 评论(0) 收藏 举报

用三个节点反转一个链表

public class ListNode {
	ListNode next=null;
	int data;
	public ListNode(int data){
		this.data=data;
	}
	public static ListNode reverseList(ListNode head){//返回反转后的链表头节点		
		ListNode p1=head;//保存当前的头节点
		ListNode p2=head.next;//保存当前的下一个节点
		head.next=null;  //旧的头指针是新的尾指针,next需要指向NULL  
		ListNode p3=null;//用来保存下一步要处理的节点
		while(p2!=null){
			p3=p2.next; //用来保存下一步要处理的节点
			p2.next=p1;//p2的next指向p1
			p1=p2;//p1指向下一个p2
			p2=p3;//p2指向下一个p3
		}
		head=p1;//当p2为null时p1为最后一个,也就是反转后的头节点
		return head;//返回反转后的头节点
	}
	public static void main(String [] args){//测试部分
		ListNode head=new ListNode(0);
		ListNode node1=new ListNode(1);
		ListNode node2=new ListNode(2);
		ListNode node3=new ListNode(3);
		head.next=node1;
		node1.next=node2;
		node2.next=node3;
		
		head=reverseList(head);
		while(head!=null){
			System.out.println(head.data);
			head=head.next;
		}
		
		
		
	}
}
输出:

3
2
1
0



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Java实现单链表翻转

单链表翻转比如有如下链表:       需要按照C B A 输出,我们可以有好几种方法: package org.andy.test; import java.util.ArrayList; import java.util.List; ...
  • fengshizty
  • fengshizty
  • 2015-03-19 17:10
  • 1561

给定一个链表,链表的每一个节点包含三个属性:1、节点值;2、指向下一个结点的引用;3、随机指向链表内任意一个节点的引用,也能不指向任何节点。复制该链表

思路:这个算法的难点就难在链表有一个指向随机节点的引用,你不能确定这个引用指向哪一个节点,但是我们可以用选择参照的方式,来解决问题。用原链表作为参照物,head为原链表的某一节点,这个节点的next本来是指向下一个节点的,但是 现在,我们可以把这个next指向复制链表相对于原链表的相应节点headC...
  • zx582727090
  • zx582727090
  • 2016-08-05 16:23
  • 614

反转单链表 (三种方法整理)

题目:反转单链表 输入一个链表,反转链表后,输出链表的所有元素。 据找工作的师兄说,反转单链表基本各个公司面试都会有,整理出一些写的比较好的code,供我等小白们学习。简洁,清晰,我觉得写得蛮好的。 /* struct ListNode { int val; st...
  • hyqsong
  • hyqsong
  • 2015-10-26 21:15
  • 19162

数据结构——反转单链表

最近看了《剑指offer》这本书,遇到了一个问题:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。 链表结点定义如下:struct ListNode { int _data; ListNode * _pNext; }; 解决方案如下:Li...
  • u013271921
  • u013271921
  • 2015-06-05 22:17
  • 3042

反转单向链表

反转单向链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。而单向链表就是在每一个结点中除了保存的数据之外只有一个指向下一个节点的指针。双向链表的每一个节点除了保存的数据之外,即有指向下一个节点的指针还有指向上一个节点的指针。 单...
  • iosrookie
  • iosrookie
  • 2015-05-23 07:46
  • 995

定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。  假设有链表A->B->C->D->E->F->G。在反转链表过程中的某一阶段,其链表指针指向为:AF->G。也就是说在结点D之前的所有结点都已经反转,而结点D后面...
  • jdx888
  • jdx888
  • 2016-09-07 11:07
  • 1290

输入一个链表,反转链表后,输出链表的所有元素。

剑指offer:输入一个链表,反转链表后,输出链表的所有元素。 两种思路: 思路1:建立节点指针类型堆栈,遍历链表,将指针压栈,顺次出栈,实现反转。这个占用内存空间较大。 思路2:依次遍历链表,改变节点的指向,注意之前要将下一个节点的地址赋值给一个指针next保存。 事实上,next指针表示...
  • u013686654
  • u013686654
  • 2017-06-28 15:13
  • 507

数据结构_不带头结点的链表逆制

1:以前写的都是带有头节点的链表的逆制,其思想是:把头节点后的后一个节点摘下来进行头插就可以了,实现的方法也不难,只需要两个指针就可以实现,而我这主要实现的是不带头节点的链表,而且时间复杂度位O(n),也是需要两个指针来实现,具体看代码: 2:sort.h-->头文件 #include u...
  • zhou753099943
  • zhou753099943
  • 2015-10-26 19:22
  • 885

[算法]实现单链表的反转

实现链表的反转解题思路: 为了正确反转一个链表,需要调整指针的指向。举例说明,例如i,m,n是三个相邻的结点,假设经过若干步操作,已经把结点i之前的指针调整完毕,这些结点的next指针都指向前面一个结点。现在遍历到结点m,当然需要调整结点的next指针,让它指向结点i,但需要注意的是,一旦调整了...
  • CodeEmperor
  • CodeEmperor
  • 2016-05-06 18:32
  • 1933

C++算法之 反转单链表

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点,链表节点定义为: struct ListNode {      int    m_nValue;     List...
  • djb100316878
  • djb100316878
  • 2014-12-12 14:10
  • 7217
    个人资料
    • 访问:15707次
    • 积分:829
    • 等级:
    • 排名:千里之外
    • 原创:67篇
    • 转载:5篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论