链表问题

黑夜中的一点慰藉 2013-01-22 10:02:15
题目:通过只调整链(而不是数据)来交换两个相邻的元素,使用单链表

下面是我写的,原链表是1-->2-->3-->4,修改2,3以后链表应该为1-->3-->2-->4,我修改完以后不会把1指向3,1还是指向2,请问我的程序怎么改?什么思路?
package com.wwy.thirdTest;
/**
* 交换整个链表中相邻的两个整链(不是数据),分别做单链表与双链表的,不考虑循环链表
* @author wWX161568
*
*/
public class Test3_2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Node1 n1 = new Node1("111");
Node1 n2 = new Node1("222");
Node1 n3 = new Node1("333");
Node1 n4 = new Node1("444");

n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = null;
//1-->2-->3-->4
System.out.println("n2 --> n3" + n2.next.data);
//互换后的链表结构1-->3--2--4
exchangeSingle(n2,n3);

System.out.println("n3 --> n2" + n1.next.data);


}

/**
* 单链表节点类
* @author wWX161568
*
*/
private static class Node1
{
String data;
Node1 next;

public Node1(String str)
{
data = str;
}
}

/**
* 单链表相邻两个节点互换
* @param previous
* @param next
*/
public static void exchangeSingle(Node1 previous,Node1 next)
{
if(previous.next != next)
{
System.out.println("不是两个相邻的节点,请检查!!!");
}
else
{
//把前一个节点指向后一个节点的下一个节点
previous.next = next.next;
//在吧后一个节点的下一个节点指向前一个节点
next.next = previous;
}
}

}
...全文
202 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
star60 2013-01-22
  • 打赏
  • 举报
回复
你没有修改N2前一个节点的next,所以还是1->2,你的逻辑执行后1->2, 3—>2->4. 应该修改N2前一个节点的next,使之1->3->2>4. 建议传入一个三个参数head,current,next. head遍历可以得到previous. temp = current.next current.next = next.next; next.next = current; previous.next = temp
wlcw16 2013-01-22
  • 打赏
  • 举报
回复
在你的方法中 除了参数previous和next,再传个参数head 通过head遍历出previous的前node
zxhcloth 2013-01-22
  • 打赏
  • 举报
回复
如果在你的应用设计里头,真的没办法知道“前一个节点”,那么就得改变你的节点结构,增加一个指向前置节点的引用,如:

private static class Node1
    {
        String data;
        Node1 previous;
        Node1 next;
         
        public Node1(String str)
        {
            data = str;
        }
    }
  • 打赏
  • 举报
回复
补充:不知道前一个节点是谁的时候,只知道2节点,而不知道他的前一个节点的时候,怎么获取2节点的前一个节点???
  • 打赏
  • 举报
回复
引用 1 楼 zxhcloth 的回复:
你的exchangeSingle方法设计有明显的缺陷。 因为是链表,所以它有前有后,你只给出了要交换位置的两个节点,请问前面指向他们的节点呢?没这个节点你怎么保持完整的链表? 所以你的改变这个方法的设计,我这里有两个方案 1、沿用你的思路,再加一个参数:前接节点(如你要交换2、3节点,这个前接节点就是1) 2、只要一个参数,这个参数就是“前接节点”,方法体的内容就是交换“前接节点”的后续两……
我现在是不知道怎么获取2节点的前一个节点,因为是单向链表,怎么获取他的前一个节点那?
zxhcloth 2013-01-22
  • 打赏
  • 举报
回复
你的exchangeSingle方法设计有明显的缺陷。 因为是链表,所以它有前有后,你只给出了要交换位置的两个节点,请问前面指向他们的节点呢?没这个节点你怎么保持完整的链表? 所以你的改变这个方法的设计,我这里有两个方案 1、沿用你的思路,再加一个参数:前接节点(如你要交换2、3节点,这个前接节点就是1) 2、只要一个参数,这个参数就是“前接节点”,方法体的内容就是交换“前接节点”的后续两个节点的位置。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧